Beispiel #1
0
 def test_grammar_consistency(self, expression: str) -> None:
     # The expression should be valid according to the grammar.
     grammar_parser.parse(
         value=expression,
         parser_rule="configValue",
         lexer_mode="DEFAULT_MODE",
     )
 def test_grammar_consistency(self, expression: str, is_valid_grammar: bool) -> None:
     ctx: Any = nullcontext() if is_valid_grammar else raises(GrammarParseError)
     with ctx:
         grammar_parser.parse(
             value=expression,
             parser_rule="configValue",
             lexer_mode="DEFAULT_MODE",
         )
Beispiel #3
0
 def check_cache_lexer_id() -> None:
     # Parse a dummy string to make sure the grammar cache is populated
     # (this also checks that multiple threads can parse in parallel).
     grammar_parser.parse("foo")
     # Keep track of the ID of the cached lexer.
     lexer_ids.append(id(grammar_parser._grammar_cache.data[0]))
     # Wait until we are done.
     while not stop.is_set():
         time.sleep(0.1)
Beispiel #4
0
def test_parse_interpolation(inter: Any, key: Any, expected: Any) -> None:
    cfg = OmegaConf.create({
        "dict": {
            "bar": 20
        },
        "list": [1, 2],
    }, )

    root = OmegaConf.select(cfg, key)

    tree = grammar_parser.parse(
        parser_rule="singleElement",
        value=inter,
        lexer_mode="VALUE_MODE",
    )

    def callback(inter_key: Any, memo: Optional[Set[int]]) -> Any:
        assert isinstance(root, Container)
        ret = root._resolve_node_interpolation(inter_key=inter_key, memo=memo)
        return ret

    visitor = grammar_visitor.GrammarVisitor(
        node_interpolation_callback=callback,
        resolver_interpolation_callback=None,  # type: ignore
        memo=None,
    )
    ret = visitor.visit(tree)
    assert ret == expected
Beispiel #5
0
def decode(expr: Optional[str], _parent_: Container, _node_: Node) -> Any:
    """
    Parse and evaluate `expr` according to the `singleElement` rule of the grammar.

    If `expr` is `None`, then return `None`.
    """
    if expr is None:
        return None

    if not isinstance(expr, str):
        raise TypeError(f"`oc.decode` can only take strings or None as input, "
                        f"but `{expr}` is of type {type(expr).__name__}")

    parse_tree = parse(expr,
                       parser_rule="singleElement",
                       lexer_mode="VALUE_MODE")
    val = _parent_.resolve_parse_tree(parse_tree, node=_node_)
    return _get_value(val)
Beispiel #6
0
def test_empty_stack() -> None:
    """
    Check that an empty stack during ANTLR parsing raises a `GrammarParseError`.
    """
    with raises(GrammarParseError):
        grammar_parser.parse("ab}", lexer_mode="VALUE_MODE")
Beispiel #7
0
 def get_tree() -> antlr4.ParserRuleContext:
     return grammar_parser.parse(
         value=definition,
         parser_rule=rule,
         lexer_mode=self._get_lexer_mode(rule),
     )