2009-12-09 71 views
0

我是ANTLR的新手,我已经提出了这个词法分析规则来解析评论,它会起作用吗?评论词法规则

COMMENT_LINE  : (COMMENT (. - LINE_ENDING)* LINE_ENDING){$channel=hidden}; 

(我无法找到关于语法像这样在文档的任何东西)

+0

除此之外,它依赖于所有其他词法规则在你的语法事实,减号, '-',可能会导致某种错误。你能解释一下你的意思吗?你能举几个你想分析的字符串的例子吗? – 2009-12-09 08:44:15

+0

提到的所有其他“规则”实际上是令牌,我试图匹配评论关键字后跟其余的行。 – RCIX 2009-12-09 09:07:28

+0

词法分析规则的顺序也很重要。例如,如果词法分析器规则为'ANY_CHAR:。 ;'不是最后一条规则,语法将不起作用,因为之后的任何规则将永远无法匹配任何内容,因为ANY_CHAR将吞噬所有内容。但我想博扬已经成功地回答了你的问题,对吧? – 2009-12-09 09:11:46

回答

2

您的规则不编译的。如果您使用ANTLRWorks创建新的词法分析器语法,可以选中一个框以使其生成与单行注释匹配的词法分析器规则。 IT这产生:

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    ; 

另外,也可以使用这样的匹配单行注释:

COMMENT_LINE 
    : COMMENT (options{greedy=false;}: .)* LINE_ENDING {$channel=HIDDEN;} 
    ; 
+0

很酷。为什么ANTLRWorks声称“无法显示规则COMMENT_LINE,因为未找到启动状态”? – RCIX 2009-12-09 09:11:28

+0

没关系,我想通了。 – RCIX 2009-12-09 09:13:16