java - 编程 "compiler"- 有什么方法可以知道 {(开启者)是否 }(关闭)?

标签 java regex compiler-theory language-theory

<分区>

好的,那么,我有一个构建某种 Java 编译器的练习。我不会得到太多的细节。 基本上,我想知道是否可以使用可以识别右括号的正则表达式。 例如,这将是一个合法的输入

void foo(){
   asd
}

这不会是

void foo(){
   asd
   if (){
      asd
   }

如您所见,对于 2 个开场符 ({) 只有 1 个结束符 (}),因此输入无效。有什么方法可以使用正则表达式并确定出现次数是否匹配?

最佳答案

无法使用正则表达式检查括号是否正确,因为要检查您需要跟踪打开了多少个括号等,但正则表达式无法做到这一点。

我建议你,特别是如果你想构建一个编译器,熟悉形式语言理论。例如,这篇维基百科文章在形式语言理论的上下文中给出了一些关于正则表达式的见解:http://en.wikipedia.org/wiki/Regular_expression#Formal_language_theory

关于java - 编程 "compiler"- 有什么方法可以知道 {(开启者)是否 }(关闭)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760899/

相关文章:

C# 在处理字符串时使用正则表达式

compiler-construction - 如何用编译器优化这个函数?

compiler-construction - 构建 IDE 时从什么开始?

java - Go、Java 和 C# 中数组的最大长度是多少?

java - 如何更改 Jackson 中的显式编码?

javascript - JavaScript 正则表达式的边界条件

regex - Perl - 无法去除空行

c - 编译器如何知道堆栈或堆上是否分配了某些内容?

java - Jenkins 将浏览器 URL 作为 Maven Selenium Java 测试的参数传递

java - 如何在 Java 中截断 n 个单词后的字符串?