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

Sta*_*tan 5 antlr4

我正在解析一种语言,该语言的语句为“ code”,后跟“ {”,后跟一堆我对解析不感兴趣的代码,后跟“}”。理想情况下,我希望规则如下:

skip_code: 'code' '{' ~['}']* '}'

..可以简单地跳到右花括号。问题在于被跳过的代码本身可能具有成对的花括号。因此,我本质上需要做的是运行一个计数器,并在每个“ {”上递增,并在每个“}”上递减,并在计数器回到0时结束解析规则。

ANTLR4中执行此操作的最佳方法是什么?当检测到“代码”时,我应该跳到自定义函数并吞下标记并运行计数器吗?还是有一些优雅的方法可以在语法本身中表达出来?

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

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
Run Code Online (Sandbox Code Playgroud)

Mik*_*hke 5

我会用类似的东西:

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

CODE_SYM: 'code';
OPEN_CURLY: '{';
CLOSE_CURLY: '}';
Run Code Online (Sandbox Code Playgroud)