我可能只是以错误的方式考虑这个问题,但以ruby为例,以下工作
ree-1.8.7-2011.03 :004 > a =
ree-1.8.7-2011.03 :005 > 1
=> 1
但是,以下引发错误
ree-1.8.7-2011.03 :006 > a sdlkfj
NameError: undefined local variable or method `sdlkfj' for #<Object:0x101986e88>
这当然显而易见,但这意味着ruby中的逻辑是“这一行是一个完整的,正确的表达式,一个不完整的(但可能是正确的!)表达式,或者只是一个永远不会完整的表达式。
使用ANTLR一次解析脚本很容易,但我想知道如何最好地支持这样的增量脚本。我想一种方法是制作一个语法,其唯一目的是验证“不完整但可能正确的表达”,但这似乎会导致一些严重的代码重复...在ANTLR中有更优雅的方式来支持这个吗? / p>
提前致谢
答案 0 :(得分:-1)
这只是一套指导方针,但应该提供一般性的想法。
您需要确保用于解析语句的解析器规则以明确的EOF
结尾。
start : stmt EOF; // good
start : stmt; // bad! might not parse the whole buffer!
EOF
符号(在预测或匹配期间)之后,则当前输入不完整。不要执行任何操作并等待用户输入更多文本。EOF
符号之前发生语法错误,则输入包含语法错误。根据需要报告和/或处理错误(包括可能清除输入缓冲区而不执行任何操作)。