Пример #1
0
 def __init__(self, phase_is_after_act: bool):
     self._phase_is_after_act = phase_is_after_act
     self._name_parser = parse_string.StringFromTokensParser(
         parse_string.Configuration(defs.VAR_NAME_ELEMENT,
                                    reference_restrictions.is_string__all_indirect_refs_are_strings())
     )
     self._value_parser = parse_str_src.default_parser_for(phase_is_after_act=self._phase_is_after_act)
     self._unset_keyword_matcher = token_matchers.is_unquoted_and_equals(defs.UNSET_IDENTIFIER)
Пример #2
0
def _parser(
    parse_matcher_of_regex: Callable[[TokenParser], FileMatcherSdv],
    parse_matcher_of_glob_pattern: Callable[[TokenParser], FileMatcherSdv],
) -> ParserFromTokens[FileMatcherSdv]:
    return token_stream_parsing.ParserOfMandatoryChoiceWithDefault(
        _SYNTAX_ELEM_STR,
        [
            token_stream_parsing.TokenSyntaxSetup(
                token_matchers.is_unquoted_and_equals(
                    defs.REG_EX_OPERATOR.name),
                parse_matcher_of_regex,
            ),
        ],
        parse_matcher_of_glob_pattern,
    )
Пример #3
0
 def __init__(self,
              consume_last_line_if_is_at_eol_after_parse: bool = True,
              consume_last_line_if_is_at_eof_after_parse: bool = False,
              ):
     super().__init__(consume_last_line_if_is_at_eol_after_parse,
                      consume_last_line_if_is_at_eof_after_parse)
     self._element_choices = [
         parsing.TokenSyntaxSetup(
             token_matchers.is_unquoted_and_equals(syntax_elements.REMAINING_PART_OF_CURRENT_LINE_AS_LITERAL_MARKER),
             _parse_rest_of_line_as_single_element,
         ),
         parsing.TokenSyntaxSetup(
             token_matchers.is_option(syntax_elements.EXISTING_FILE_OPTION_NAME),
             _parse_existing_file,
         ),
     ]
Пример #4
0
from exactly_lib.util.parse import token_matchers
from . import reserved_words

IS_RESERVED_WORD = token_matchers.is_unquoted_and_equals_any(
    reserved_words.RESERVED_TOKENS)

IS_PAREN__BEGIN = token_matchers.is_unquoted_and_equals(
    reserved_words.PAREN_BEGIN)
IS_PAREN__END = token_matchers.is_unquoted_and_equals(reserved_words.PAREN_END)

IS_BRACKET__BEGIN = token_matchers.is_unquoted_and_equals(
    reserved_words.BRACKET_BEGIN)
IS_BRACKET__END = token_matchers.is_unquoted_and_equals(
    reserved_words.BRACKET_END)
Пример #5
0
 def __init__(self):
     self._int_parser = parse_integer.MandatoryIntegerParser(
         parse_integer.validator_for_non_negative, )
     self._none_token_matcher = token_matchers.is_unquoted_and_equals(
         defs.NONE_TOKEN)
Пример #6
0
            False,
            syntax_elements.FILES_SOURCE_SYNTAX_ELEMENT.singular_name,
        )

        return file_list.Sdv(file_specs)

    def _parse_file_specs(self, token_parser: TokenParser) -> Sequence[file_list.FileSpecificationSdv]:
        ret_val = []
        while not token_parser.has_valid_head_matching(_TOKEN_SPEC_LIST_END):
            ret_val.append(self._file_spec_parser.parse(token_parser))
            if not token_parser.has_valid_head_matching(_TOKEN_SPEC_LIST_END):
                token_parser.require_is_at_eol(self._superfluous_line_contents_message)
        return ret_val


_TOKEN_SPEC_LIST_END = token_matchers.is_unquoted_and_equals(syntax.FILE_LIST_END)

CONTENTS = TypeVar('CONTENTS')


def _mk_file_maker__dir(modification: ModificationType, contents: FilesSourceSdv) -> FileMakerSdv:
    return _fm_dir.DirFileMakerSdv(modification, contents)


def _mk_file_maker__regular_file(modification: ModificationType, contents: StringSourceSdv) -> FileMakerSdv:
    return _fm_regular.RegularFileMakerSdv(modification, contents)


class ParserOfFileMaker(Generic[CONTENTS], ParserFromTokens[FileMakerSdv]):
    _EXPLICIT_CONTENTS_CONFIG = syntax.EXPLICIT_CONTENTS_CONFIG
Пример #7
0
        if tokens.head_is_unquoted_and_equals(syntax.FILE_MATCHER_SEPARATOR):
            tokens.consume_head()
            file_matcher = parse_file_matcher.parsers().full.parse_from_token_parser(tokens)
            return file_name, file_matcher
        else:
            is_at_eol_or_end_of_set()
            return file_name, None

    ret_val = []
    while not tokens.has_valid_head_matching(_TOKEN_IS_SET_END):
        ret_val.append(parse_element())

    return ret_val


_TOKEN_IS_SET_END = token_matchers.is_unquoted_and_equals(syntax.LITERAL_END)

_FILE_NAME_STRING_REFERENCES_RESTRICTION = is_string__all_indirect_refs_are_strings(
    text_docs.single_pre_formatted_line_object(
        str_constructor.FormatMap(
            'A file name must be defined in terms of {string_type}.',
            {'string_type': syntax_elements.STRING_SYNTAX_ELEMENT.singular_name},
        )
    )
)

_FILE_NAME_STRING_CONFIGURATION = parse_string.Configuration(
    syntax.FILE_NAME.name,
    _FILE_NAME_STRING_REFERENCES_RESTRICTION,
)
Пример #8
0
from exactly_lib.util.parse import token_matchers

TEXT_UNTIL_EOL_MARKER = ':>'
TEXT_UNTIL_EOL_TOKEN_MATCHER = token_matchers.is_unquoted_and_equals(
    TEXT_UNTIL_EOL_MARKER)

HERE_DOCUMENT_SYNTAX_ELEMENT_NAME = 'HERE-DOCUMENT'