我有一个简单的语法文件 hello.g 包含
grammar Hello_world;
utterance : greeting | exclamation;
greeting : interjection subject;
exclamation : 'Hooray!';
interjection : 'Hello';
subject : 'World!';
验证字符串“Hello World!” 和“万岁!”
但是如何测试这个语法呢?在我读到的某个地方,我们需要编译解析器和其他。我是ANTLR的新手,请帮忙。
我使用 AntlrWorks1.5 生成词法分析器和解析器;之后使用以下代码运行测试:
import antlr3
from helloworldLexer import helloworldLexer
from helloworldParser import helloworldParser
while True:
expr = raw_input('>>> ')
if expr == '':
break
cStream = antlr3.StringStream(expr)
lexer = helloworldLexer(cStream)
tStream = antlr3.CommonTokenStream(lexer)
parser = helloworldParser(tStream)
result = parser.evaluate()
print result
当我运行上面的 python 文件时,得到以下错误:
>>> Hello World!
Traceback (most recent call last):
File "C:\Users\Lenovo\workspace\antlr\output\hello.py", line 12, in <module>
lexer = helloworldLexer(cStream)
File "C:\Users\Lenovo\workspace\antlr\output\helloworldLexer.py", line 26, in __init__
state = RecognizerSharedState()
NameError: global name 'RecognizerSharedState' is not defined