Coverage for src/lumen/fhirpath/parser/__init__.py: 96%
28 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-08-31 18:46 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-08-31 18:46 +0000
1import sys
2from antlr4 import *
3from antlr4.tree.Tree import ParseTreeWalker
4from antlr4.error.ErrorListener import ErrorListener
5from antlr4.error.Errors import LexerNoViableAltException
6from lumen.fhirpath.parser.generated.FHIRPathLexer import FHIRPathLexer
7from lumen.fhirpath.parser.generated.FHIRPathParser import FHIRPathParser
8from lumen.fhirpath.parser.ASTPathListener import ASTPathListener
11class _ThrowingErrorListener(ErrorListener):
12 def syntaxError(self, recognizer, offending_symbol, line, column, msg, e): # type: ignore[override]
13 raise SyntaxError(f"line {line}:{column} {msg}")
16def recover(e):
17 raise e
20def parse(value):
21 textStream = InputStream(value)
23 astPathListener = ASTPathListener()
24 error_listener = _ThrowingErrorListener()
26 lexer = FHIRPathLexer(textStream)
27 lexer.recover = recover
28 lexer.removeErrorListeners()
29 lexer.addErrorListener(error_listener)
31 parser = FHIRPathParser(CommonTokenStream(lexer))
32 parser.buildParseTrees = True
33 parser.removeErrorListeners()
34 parser.addErrorListener(error_listener)
36 walker = ParseTreeWalker()
37 walker.walk(astPathListener, parser.expression())
39 return astPathListener.parentStack[0]