我已经写了我的语法并为访客生成了存根。为了评估我的表达方式,我还将访问子类化。但是,我面临着一个理解问题,因为我的评估员(来自访客)只对访问有好处。我不明白如何明确返回结果?将makeVisible()
之类的内容设置为最终值很容易,稍后再阅读,但是当我的表达式递归时会变得很棘手。
另外,对我来说似乎很奇怪,我需要为每个表达式设置Lexer,Stream,Parser,Tree,与instanciate只相反一次,然后将多个表达式传递给它。
访客和评估员可能是不同的东西?..我应该如何评估我的表达?
答案 0 :(得分:0)
ANTLR中访问者模式的一个定义特征是,您为扩展/实现访问者而创建的类可以返回一个对象。在创建特定于域的语言时,我需要一个表达式评估器,并找到了一个很棒的项目,Bart Kiers的优秀Mu project located here。它不在python中,但Mu Value对象的概念可以包含不同类型表达式的表示,是创建自己的表达式求值程序的一个很好的起点。
不,当你正确行事时,你不需要为每个表达重新实例化所有内容。再次,请参阅Bart对表达式求值程序示例的优秀实现(使用for和while循环以获得良好的度量)。