我正在编写一个java程序,它将根据计划类型的输入进行操作
语言
就像是
(+ (+ a b))
Run Code Online (Sandbox Code Playgroud)
假设我现在想检查语法,如果有2个括号已打开,则必须有2个其他结束括号.我不知道如何使用正则表达式来实现这一点.你能帮我吗
正则表达式不能将括号与任意深度配对.Scheme语法不规律.
http://en.wikipedia.org/wiki/Regular_language#The_number_of_words_in_a_regular_language
因此,可以通过计算L'中的单词来证明某种语言L'的非规则性.例如,考虑平衡括号字符串的Dyck语言.Dyck语言中长度为2n的单词数等于加泰罗尼亚语数...,其形式为p(n)λn,见证了Dyck语言的非规则性.
你将不得不对它进行标记化,然后遍历计算深度的标记,并确保最后的深度为零并且永远不会消极.
对于一个简单的语言,它有括号空格和由重复的字母"a"组成的标识符,你可能会这样做
Patter token = Pattern.compile("[() ]|a+|.", Pattern.DOT_ALL);
Matcher m = token.matcher(sourceCode);
int parenDepth = 0;
while (m.find()) {
char ch = m.group().charAt(0);
switch (ch) {
case '(':
++parenDepth;
break;
case ')':
if (parenDepth == 0) {
fail("Too many close parens");
}
--parenDepth;
break;
}
}
if (parenDepth != 0) {
fail(parenDepth + " unclosed lists");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |