提问者:小点点

正则表达式用于匹配编程语言,如块[重复]


我正在尝试用c语言编写一个小型脚本语言,目前正在做一个块解析器,我一直在为块编写正则表达式。积木可以有∞ 子块的时间

这就是我需要抓住的

{ 
    naber(); 
}
{
    int x = 5;
    x = 2;
    if (x == 5) {
        x = 5;
    }
}

我试过这个但不管用

\{[^{}]*|(\{[^\{\}]\})*\}

这是我的第一篇帖子,请原谅我


共2个答案

匿名用户

Regex不会帮你的。如果您正在设计一种可能要执行的脚本语言,它具有块和子块,那么您需要上下文无关语法,而不是可以通过正则表达式表达的正则语法。

要解释无上下文语言,您需要以下步骤(简化):

  1. 将代码字符串转换为令牌/符号列表。这个过程由一个通常称为Lexer的组件完成

这些应该已经是很多需要搜索的概念了,但是所有这些都可以通过像ANTLR这样的工具轻松实现。很明显,ANTLR可能有替代品,我只是不记得有。

匿名用户

我同意那些说正则表达式不是你应该使用的解析代码。话虽如此,在一些reg引擎上,匹配字符并获取块中的代码是可能的。

这可能适合您{(?

这里有更多关于它的匹配平衡花括号