正则表达式为计划类型的输入

Gau*_*rav 1 java regex scheme

我正在编写一个java程序,它将根据计划类型的输入进行操作

语言

就像是

(+ (+ a b))
Run Code Online (Sandbox Code Playgroud)

假设我现在想检查语法,如果有2个括号已打开,则必须有2个其他结束括号.我不知道如何使用正则表达式来实现这一点.你能帮我吗

Mik*_*uel 6

正则表达式不能将括号与任意深度配对.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)