繁体   English   中英

ANTLR LEXER RULE有两个规则,一个规则将接受包括符号在内的每个字符,另一个规则将仅接受字符

[英]ANTLR LEXER RULE to have two rules, one will accept every characters including symbols and another will accept only characters

在ANTLR LEXER RULE中是否可能有两个规则,一个规则将接受包括所有符号(例如()_等)的每个字符,而另一个规则仅接受az字符?

如下所示:

String: ('a'..'z'|'A'..'Z')*;
EVERYTHING:(.)*;   

对的,这是可能的。

这是ANTLR词法分析器决定使用哪个规则的方式:-哪个规则可以匹配输入的最长子序列(从输入中的当前位置开始)-如果更多的规则可以匹配该子序列(即平局) ,第一个规则(在语法文件中定义)获胜

因此,在您的情况下,对于仅字母输入,两个规则都将匹配它,但是由于String在语法上更靠前,因此将使用它。 在非alpha输入的情况下, EVERYTHING规则将能够匹配更长的子序列,因此将被使用。

但是请注意,在编写时,您的EVERYTHING规则甚至匹配空格和换行符,因此在这种特定情况下,仅当整个输入只是字母字符而没有其他内容时,才使用String规则。 无论哪种情况,整个输入都将作为单个标记进行匹配。 因此,在实际语法中, EVERTYHING规则可能会略有不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM