提问人:Vedanta Mohapatra 提问时间:10/2/2023 更新时间:10/3/2023 访问量:66
ANTLR 未生成 ParserBase
ANTLR not generating ParserBase
问:
我是 ANTLR 的新手,正在这里研究 CPP14 语法。我试过使用
antlr4 -Dlanguage=Python3 CPP14Lexer.g4
antlr4 -Dlanguage=Python3 CPP14Parser.g4
然后使用以下驱动程序代码:
import sys
from antlr4 import *
from CPP14Lexer import CPP14Lexer
from CPP14Parser import CPP14Parser
def main(argv):
input_stream = FileStream(argv[1])
lexer = CPP14Lexer(input_stream)
stream = CommonTokenStream(lexer)
parser = CPP14Parser(stream)
tree = parser.start_()
if __name__ == '__main__':
main(sys.argv)
并且,尝试运行它以解析 cpp 中的 Hello World 代码,但我收到以下错误:
python Driver.py example.cc
Traceback (most recent call last):
File "/Users/vedantamohapatra/antlr/Driver.py", line 4, in <module>
from CPP14Parser import CPP14Parser
File "/Users/vedantamohapatra/antlr/CPP14Parser.py", line 14, in <module>
from CPP14ParserBase import CPP14ParserBase
ModuleNotFoundError: No module named 'CPP14ParserBase'
我应该如何纠正这个问题?
答:
1赞
Bart Kiers
10/3/2023
#1
我认为您应该先运行 transformGrammar.py,然后在运行驱动程序文件之前 CPP14ParserBase.py。
评论
0赞
Vedanta Mohapatra
10/3/2023
谢谢你,我实际上没有看到 repo 本身有一个 ParserBase。我以为 ANTLR 会为我们生成它
1赞
Bart Kiers
10/3/2023
是的,我可以想象。有时,生成的解析器需要一些特定于目标的代码,在这种情况下,存储库中有一个 base-lexer 和/或 -parser。在这种情况下,在语法的某个地方有一个叫做检查某些内容的方法。此函数的实现是特定于目标的,并在 base-parser 中定义实现。IsPureSpecifierAllowed
评论
python transformGrammar.py