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

标签 antlr4

我正在解析一种语言,它有一个语句“代码”,后跟“{”,然后是一堆我对解析不感兴趣的代码,然后是“}”。理想情况下,我希望有一个规则,例如:
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/

相关文章:

c++ - ANTLR4 cpp 语法无法生成解析器;空指针异常

ANTLR 解析器规则匹配 : x and/or y and/or z in any order

java - Antlr4 - 多行文件解析器 -

c# - 用于删除选择的 ANTLR4 语法集成复杂性

antlr4 - 标签 x 分配给一个不是集合的 block

antlr - 对包中的语法运行 ANTLR grun (TestRig)。

antlr4 - 对于 +、-、/、* 等的正确优先级评估,正确的语法应该是什么

c++ - antlr4 c++ 目标的 undefined reference 问题

antlr - 使用 Antlr4 和 StringTemplates 从 AST 生成源代码

parsing - 如何遍历解析树以检查ANTLR中的语法错误