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