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", )
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)
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
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)
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")
def get_tree() -> antlr4.ParserRuleContext: return grammar_parser.parse( value=definition, parser_rule=rule, lexer_mode=self._get_lexer_mode(rule), )