我为一种理解C风格单行注释的小语言编写了一个语法,例如.
// this is a comment
Run Code Online (Sandbox Code Playgroud)
这是我使用antlr v3.0.1为这种语言编写的语法片段
SINGLELINE_COMMENT
: '/' '/' (options {greedy=false;} : ~('\r' | '\n'))* ('\r' | '\n' )+ {$channel=HIDDEN;};
WS : (' '|'\r'|'\t'|'\u000C'|'\n')+ {$channel=HIDDEN;};
Run Code Online (Sandbox Code Playgroud)
除了当注释在脚本中的最后一个并且没有终止NL/CR时,我得到了来自antlr的恼人消息(在运行时):这几乎是有效的.
line 1:20 required (...)+ loop did not match anything at character '<EOF>'
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱这条消息?我尝试EOF
在(..)+
表达式中添加令牌,但这不起作用.
您不需要该选项:当您有或在您的规则中greedy=...
时,通常需要它。由于您已经在规则中的隐藏通道上放置了换行符,因此您可以将其从您的:.*
.+
WS
SINGLELINE_COMMENT
SINGLELINE_COMMENT
: '//' ~('\r' | '\n')* {$channel=HIDDEN;}
;
WS
: (' '|'\r'|'\t'|'\u000C'|'\n')+ {$channel=HIDDEN;}
;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
852 次 |
最近记录: |