用于方案类型输入的正则表达式



我正在编写一个java程序,该程序将根据方案类型中的输入进行操作

的语言。

之类的
(+ (+ a b))

假设我现在想检查语法,如果有两个括号已经打开,那么必须有另外两个结束括号。我不确定如何用正则表达式实现这一点。你能帮我一下吗

正则表达式不能将括号配对到任意深度。

http://en.wikipedia.org/wiki/Regular_language The_number_of_words_in_a_regular_language

因此,某些语言L'的非正则性可以通过计数L'中的单词来证明。例如,考虑平衡括号字符串的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");
}

最新更新