Parsing 使用ANTLR容忍格式错误的语句(例如,用于代码完成)
我有一个简单DSL的ANTLR语法,当没有语法错误时,一切都很顺利。然而,现在我需要支持一个自动完成机制,在这里我需要从我的树语法中获取可能的完成,这些树语法对属性、函数等执行基本类型检查 问题是,ANTLR不是在本地Parsing 使用ANTLR容忍格式错误的语句(例如,用于代码完成),parsing,autocomplete,antlr,grammar,Parsing,Autocomplete,Antlr,Grammar,我有一个简单DSL的ANTLR语法,当没有语法错误时,一切都很顺利。然而,现在我需要支持一个自动完成机制,在这里我需要从我的树语法中获取可能的完成,这些树语法对属性、函数等执行基本类型检查 问题是,ANTLR不是在本地语句级别报告语法错误,而是在解析树的更高层,例如在程序或函数级别报告语法错误。因此 program | function / | \ /
语句
级别报告语法错误,而是在解析树的更高层,例如在程序
或函数
级别报告语法错误。因此
program
|
function
/ | \
/ | \
stat hosed stat
我在树的顶部得到垃圾节点,因为未能匹配语句
规则“冒泡”,并阻止函数
规则匹配
有没有一种方法可以编写一个包含“catch all”子句的规则来吃意外的代币?
我在想这样的事情:
statement
: var_declaration
| if_statement
| for_loop
| garbage
;
garbage
: /* Match unexpected tokens, etc. (not actual statements, or closing
parens, braces, etc.). Maybe just consume one input token and let
the parser try again? */
;
AST中可能有任意数量的垃圾节点,但垃圾之前(最好是之后)的所有内容都应该是正常的
如果有任何提示/建议/指针等,我将不胜感激。我正在使用ANTLR v3,Java目标。看一看
顺便说一句:如果你的目标是eclipse,你应该看看xtext()——它基于ANTLR 3,生成了一个很好的编辑器,带有语法hilighting和代码辅助功能。看看
顺便说一句:如果你的目标是eclipse,你应该看看xtext()——它基于ANTLR 3,生成了一个很好的编辑器,具有语法hilighting和代码辅助功能。我有一个catch子句,如wiki中所述,但可以理解的是,异常是在总体函数规则上触发的,而不是特定的hosed语句。我的语法需要(我假设)支持部分语句,但我还没有设法将它们结合起来。。。不过,Xtext是一个有趣的选择。谢谢你的链接。我有一个catch子句,正如wiki中所描述的,但是可以理解的是,异常是基于总体函数规则,而不是特定的hosed语句。我的语法需要(我假设)支持部分语句,但我还没有设法将它们结合起来。。。不过,Xtext是一个有趣的选择。谢谢你的链接。