antl4:匹配'rn'和& # 39; n # 39;作为一个象征



我正在尝试将块之间的空行数限制为。

EOL:
'r'?
'n'
'r'? 
'n'?
SPACE*

是否有一种方法将'n'和'rn'匹配为一个符号,如Perl 5中的'r '(换行)。或者完全忽略'r' ?

所有Lexer规则都产生一个"符号";(在ANTLR中它们被称为令牌)。

在Antlr中匹配EOL的典型方式是:

EOL: 'r?n';

这将匹配一个可选的回车,后跟换行符。

匹配rnn

将空格放在-> skip指令或-> channel(HIDDNE)指令的单独规则中是非常习惯的。

如果您试图合并行尾空白和多个空行,请尝试:

EOL:   'r'? 'n' (' '* 'r'? 'n')*;

这将为后面的空格和任何后续的空行及其结束符生成一个标记。

lexer语法示例:

lexer grammar eol
;
ALPHA: [A-Za-z]+;
EOL:   'r'? 'n' (' '* 'r'? 'n')*;

示例输入文件:

ANB

G
KL




ZZ
➜ grun eol tokens -tokens < eol.txt
[@0,0:2='ANB',<ALPHA>,1:0]
[@1,3:6='nnnn',<EOL>,1:3]
[@2,7:7='G',<ALPHA>,5:0]
[@3,8:8='n',<EOL>,5:1]
[@4,9:10='KL',<ALPHA>,6:0]
[@5,11:19='nnnnnnnnn',<EOL>,6:2]
[@6,20:21='ZZ',<ALPHA>,15:0]
[@7,22:21='<EOF>',<EOF>,15:2]

相关内容

  • 没有找到相关文章

最新更新