gpt4 book ai didi

ANTLR4 解析规则以匹配开/关括号

转载 作者:行者123 更新时间:2023-12-05 00:16:48 37 4
gpt4 key购买 nike

我正在解析一种语言,它有一个语句“代码”,后跟“{”,然后是一堆我对解析不感兴趣的代码,然后是“}”。理想情况下,我希望有一个规则,例如:
skip_code: 'code' '{' ~['}']* '}'
..它会简单地跳到右花括号。问题是被跳过的代码本身可能有一对大括号。所以,我本质上需要做的是运行一个计数器并在每个 '{' 上递增并在每个 '}' 上递减,并在计数器回到 0 时结束解析规则。

在 ANTLR4 中这样做的最佳方法是什么?当检测到“代码”并吞下 token 并运行我的计数器时,我应该跳到自定义函数,还是有一些优雅的方法可以在语法本身中表达这一点?

编辑:一些示例代码,根据要求:

class foo;
int m_bar;
function foo_bar;
print("hello world");
endfunction
code {
// This is some C code
void my_c_func() {
printf("I have curly braces {} in a string!");
}
}
function back_to_parsed_code;
endfunction
endclass

最佳答案

我会使用类似的东西:

skip_code: CODE_SYM block;
block: OPEN_CURLY (~CLOSE_CURLY | block)* CLOSE_CURLY;

CODE_SYM: 'code';
OPEN_CURLY: '{';
CLOSE_CURLY: '}';

关于ANTLR4 解析规则以匹配开/关括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41355044/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com