解析由lettre组成的变量和像“JAVAC 1.7.0.XXX”

时间:2015-05-11 13:09:16

标签: javacc

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

修改

这里是代码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>。 normaly,为什么这个规则不适用:如果有多个正则表达式描述了前缀,则使用描述输入流的最长前缀的正则表达式。 (这个 被称为“最大的蒙克规则”。)非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

这是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>。 Normaly,为什么这个规则不适用:

  

如果多个正则表达式描述了前缀,则使用描述输入流的最长前缀的正则表达式。 (这被称为“最大蒙克规则”。)