我想在我的语言中添加一个关键字。
此关键字只需在一个特定的解析器语法规则中匹配。
由于向后兼容性,我希望允许此关键字继续用作变量名,即可以通过词法分析器规则来匹配,该规则确定令牌是否适合变量名。
只要在文件中找到新规则,Lexer就会匹配新规则。
是否有合适的方法来修改var_declaration规则以使其与IDENT或新的KEYWORD标记匹配?
protected
modified_var_declaration:
VAR (IDENT|KEYWORD);
;
相关规则是:
IDENT // matches variable names
options { testLiterals=true; }
: ( '_' | 'a'..'z' | 'A'..'Z' ) ( '_' | 'a'..'z' | 'A'..'Z' | DIGIT )*
;
KEYWORD: // my new keyword
"key"
;
用于创建变量的解析器规则是:
protected
var_declaration:
VAR IDENT;
;
答案 0 :(得分:2)
许多语言都有上下文相关的关键字。处理它们的第一步是添加表示变量名称的新解析器规则ident
。在解析器中使用该规则而不是IDENT
。
ident
: IDENT
| KEYWORD
;
答案 1 :(得分:0)
查看http://www.antlr.org/wiki/display/ANTLR3/1.+Lexer哪个可以帮到你。当允许“KEYWORD”时,你需要设置和取消设置一个标志,即
KEYWORD : { keywordcontext }?=> "key";
这里的诀窍是切换你可以期待关键字的位置,这可能不是那么简单。