解析由字母和数字组成的变量,如“JAVAC 1.7.0.XXX”

parsing variable composed with lettre and numbers like " JAVAC 1.7.0.XXX"

我正在尝试使用 JavaCC 解析正则表达式,但我遇到了由字母和数字组成的变量“Y”的问题,例如:“JAVA 1.7.1.XXX”。知道我已经定义了 Token <id > = < lettre > | <number> < #lettre : [ "A"-"Z", "a"-"z"]> | < #number : [ "0"-"9" ] > 在执行过程中,解析器像 <id> 一样处理变量“Y”的第一部分。解析停止后。提前致谢。

编辑。

此处代码parseur.jj:

TOKEN : { <ID2 :  (["a"-"z","A"-"Z","0"-"9","_"])+
                  ( (["0"-"9"])+ "." (["0"-"9"])+ "." (["0"-"9"])+)+
                  (["a"-"z","A"-"Z","_","."])+ >}

TOKEN : { <ID : ["a"-"z","A"-"Z","_"] (["a"-"z","A"-"Z","0"-"9","_"])* >}

假设剩余的输入流以此开头:MyFile1_Test 1.2.3.txt 那么令牌 <ID> 归因于?

而不是 <ID2>。通常,为什么这个规则不适用:如果一个以上的正则表达式描述了一个前缀,那么使用描述输入流的最长前缀的正则表达式。 (这个 被称为“最大咀嚼规则”。)非常感谢您的帮助

这是 parseur.jj 代码:

TOKEN : { <ID2 :  (["a"-"z","A"-"Z","0"-"9","_"])+ ( (["0"-"9"])+ "." (["0"-"9"])+ "." (["0"-"9"])+)+ (["a"-"z","A"-"Z","_","."])+ >}

TOKEN : { <ID : ["a"-"z","A"-"Z","_"] (["a"-"z","A"-"Z","0"-"9","_"])* >}

假设剩余的输入流开始于:MyFile1_Test 1.2.3.txt 那么令牌 <ID> 是归因的,而不是 <ID2>。通常,为什么此规则不适用:

If more than one regular expression describes a prefix, then a regular expression that describes the longest prefix of the input stream is used. (This is called the “maximal munch rule”.)