[英]ANTLR LEXER RULE to have two rules, one will accept every characters including symbols and another will accept only characters
在ANTLR LEXER RULE中是否可能有两个规则,一个规则将接受包括所有符号(例如(
, )
和_
等)的每个字符,而另一个规则仅接受a
到z
字符?
如下所示:
String: ('a'..'z'|'A'..'Z')*;
EVERYTHING:(.)*;
对的,这是可能的。
这是ANTLR词法分析器决定使用哪个规则的方式:-哪个规则可以匹配输入的最长子序列(从输入中的当前位置开始)-如果更多的规则可以匹配该子序列(即平局) ,第一个规则(在语法文件中定义)获胜
因此,在您的情况下,对于仅字母输入,两个规则都将匹配它,但是由于String
在语法上更靠前,因此将使用它。 在非alpha输入的情况下, EVERYTHING
规则将能够匹配更长的子序列,因此将被使用。
但是请注意,在编写时,您的EVERYTHING
规则甚至匹配空格和换行符,因此在这种特定情况下,仅当整个输入只是字母字符而没有其他内容时,才使用String
规则。 无论哪种情况,整个输入都将作为单个标记进行匹配。 因此,在实际语法中, EVERTYHING
规则可能会略有不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.