【发布时间】:2020-01-13 22:40:54
【问题描述】:
我需要一个与我的编程语言语法相匹配的 Java 语法解析器的正则表达式,如下所示:
Variable1={1,2,3}
Variable2=Variable1+{4,5,6}+{}*{2}
Variable3=(Variable2+{1})*Variable1
?Variable3
?{1,2,3}
?Variable3+{1,2,3}
对变量的表达式赋值包含“=”并且计算以“?”开头标志。 在括号里面,可以定义一个新的表达式,但是新的表达式又可以包含括号,所以就像递归的正则赋值,这种方式是不可能的:
String IdPattern = "[a-zA-Z][a-zA-Z0-9]*";
String SePattern ="\\{"+"([0-9]*)(\\,[0-9]+)*"+"\\}";
// Problem at next line:
String CoPattern = "\\(" + ExPattern + "\\)";
// CoPattern depends on
// Expattern, which depends on TePattern,
// which depends on FaPattern, which depends on CoPattern again.
String FaPattern= "("+IdPattern+"|"+SePattern+"|"+CoPattern+")";
String TePattern = FaPattern + "("+ "\\*"+ FaPattern+ ")*" ;
String ExPattern= "" + TePattern + "(" + "\\+"+ TePattern+")*";
String AsPattern = "("+IdPattern+"="+ExPattern+")";
String PriPattern = "(\\?"+ExPattern +")";
String StaPattern = "("+AsPattern+"|"+PriPattern+")";
String Pro = StaPattern+"$";
System.out.println("Input=((({20}+{1,2,3})))".matches(Pro));
这里的问题是,CoPattern 依赖于 ExPattern,而 ExPattern 又依赖于 FaPattern,而 FaPattern 又依赖于 CoPattern 本身。那么我该如何完成这项工作呢?
【问题讨论】:
-
您使用了错误的工具来完成这项工作。您需要一个扫描仪和一个表达式解析器。你不能用正则表达式来做到这一点。
标签: java regex parsing syntax-error parse-tree