【发布时间】:2013-05-26 15:46:55
【问题描述】:
好的,所以,我有一个练习来构建一种 java 编译器。细节我就不多说了。 基本上,我想知道是否可以使用可以识别右括号的正则表达式。 例如,这将是一个合法的输入
void foo(){
asd
}
这不会是
void foo(){
asd
if (){
asd
}
如您所见,对于 2 个开启者 ({),只有 1 个关闭器 (}),因此输入无效。有什么方法可以使用正则表达式并确定出现次数是否匹配?
【问题讨论】:
-
了解分词器。正则表达式不用作编译器的主要实现工具是有原因的。正则表达式可能被用作标记化/编译的一部分,但有些语言情况无法由正则表达式处理。
-
传统上这是通过堆栈完成的。
-
标准正则表达式不能用于此目的(假设您要处理任意级别的嵌套)。
-
是否允许使用 ANTLR、JavaCC 或 VisualLangLab 等专用工具?
-
以上所有都不是,只是标准的 java 1.7 类。它不应该是一个真正的编译器......我知道如何使用堆栈或级别计数器来计算数字,我只是想知道是否可以使用正则表达式来识别它。感谢您的帮助。
标签: java regex compiler-theory language-theory