给定词法分析器
fragment
FRAGID : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
ID : FRAGID;
NAME: FRAGID ('.' FRAGID)*;
鉴于语法
var_def: type=ID vname=ID ASSIGN expr
-> ^(VARDEF $type $vname expr)
;
有选项
options
{
language=CSharp3;
output=AST;
}
并给出代码
int i = 0
一切正常。
但是,当我想允许在赋值中使用 NAME 时(引用另一个对象)
var_def
: type=(NAME|ID) vname=ID ASSIGN expr
-> ^(VARDEF $type $vname expr)
;
我在运行时遇到RewriteEmptyStreamException
Antlr.Runtime.Tree.RewriteEmptyStreamException :令牌类型
在 c:\dev\stringtemplate_main\antlr\antlr3-main\runtime\CSharp3\Sources\Antlr3.Runtime\Tree\RewriteRuleElementStream.cs 中的 Antlr.Runtime.Tree.RewriteRuleElementStream.NextCore():第 200 行
在 c:\dev\stringtemplate_main\antlr\antlr3-main\runtime\CSharp3\Sources\Antlr3.Runtime\Tree\RewriteRuleTokenStream.cs 中的 Antlr.Runtime.Tree.RewriteRuleTokenStream.NextNode():第 62 行
用语法做更多的调查
var_def
: type=NAME vname=ID ASSIGN expr
-> ^(VARDEF $type $vname expr)
;
我得到一个
Antlr.Runtime.Tree.RewriteEarlyExitException :引发了“Antlr.Runtime.Tree.RewriteEarlyExitException”类型的异常。