【发布时间】:2011-10-27 14:21:39
【问题描述】:
鉴于以下基本语法,我想了解如何处理注释行。缺少的是对通常终止注释行的<CR><LF> 的处理——唯一的例外是 EOF 之前的最后一个注释行,例如。 g.:
# comment
abcd := 12 ;
# comment eof without <CR><LF>
grammar CommentLine1a;
//==========================================================
// Options
//==========================================================
//==========================================================
// Lexer Rules
//==========================================================
Int
: Digit+
;
fragment Digit
: '0'..'9'
;
ID_NoDigitStart
: ( 'a'..'z' | 'A'..'Z' ) ('a'..'z' | 'A'..'Z' | Digit )*
;
Whitespace
: ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN ; }
;
//==========================================================
// Parser Rules
//==========================================================
code
: ( assignment | comment )+
;
assignment
: id_NoDigitStart ':=' id_DigitStart ';'
;
id_NoDigitStart
: ID_NoDigitStart
;
id_DigitStart
: ( ID_NoDigitStart | Int )+
;
comment
: '#' ~( '\r' | '\n' )*
;
【问题讨论】:
-
“处理”注释行是什么意思?你想知道如何解析它们吗?
-
您似乎正在尝试处理解析器语法中的 cmets,通常乳清会在词法分析器中处理,类似于您的
Whitespace规则。您确定要在解析器中这样做吗? -
具体是什么现在不起作用?我发现这个 ANTLR 邮件列表从 2006 年开始发布,问题基本相同(和答案,但看起来与您已有的相似):antlr.org/pipermail/antlr-interest/2006-January/015130.html
-
非常感谢您的回答! @john:非常有价值的链接,特别感谢。
标签: line antlr grammar comments