gpt4 book ai didi

line - 解析注释行

转载 作者:行者123 更新时间:2023-12-03 01:19:08 28 4
gpt4 key购买 nike

鉴于以下基本语法,我想了解如何处理注释行。缺少的是 <CR><LF> 的处理它通常终止注释行 - 唯一的异常(exception)是 EOF 之前的最后一个注释行,例如:例如:

# 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' )*
;

最佳答案

除非您有非常令人信服的理由将注释放入解析器中(我想听听),否则您应该将其放入词法分析器中:

Comment
: '#' ~( '\r' | '\n' )*
;

既然您已经在 Space 中考虑了换行符,规则,像# comment eof without <CR><LF>这样输入是没有问题的

此外,如果您在解析器规则中使用文字标记,ANTLR 会在幕后自动创建它们的词法分析器规则。所以在你的情况下:

comment
: '#' ~( '\r' | '\n' )*
;

将匹配 '#'后跟零个或多个除 '\r' 之外的标记'\n'并且零个或多个除 '\r' 之外的字符和'\n' .

供将来引用:

内部解析器规则

  • ~否定标记
  • .匹配任何标记

内部词法分析器规则

  • ~否定字符
  • .匹配 0x0000 范围内的任何字符... 0xFFFF

关于line - 解析注释行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070763/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com