相关疑难解决方法(0)

允许空白部分ANTLR4

我有一个antlr4语法,专门用于嵌入到文本模板中的特定于域的语言.

有两种模式:

  • 文本(应保留空格)
  • 代码(应忽略空格)

示例语法部分:

template
  :  '{' templateBody '}'
  ;

templateBody
  : templateChunk*
  ;

templateChunk
  : code # codeChunk // dsl code, ignore whitespace
  | text # textChunk // any text, preserve whitespace
  ;
Run Code Online (Sandbox Code Playgroud)

规则code可以包含对template规则的嵌套引用.因此解析器必须支持嵌套空白/非空白部分.

也许lexer模式可以帮助 - 有一些缺点:

  • 必须在另一个编译器传递中解析代码段
  • 我怀疑嵌套部分是否可以正确映射

然而,最有希望的方法似乎是操纵隐藏的渠道.

我的问题:是否有最佳实践来满足这些要求?是否有一个示例语法,已经解决了类似的问题?

附录:

其余的语法可能如下所示:

code
  : '@' function
  ;

function
  : Identifier '(' argument ')'
  ;

argument
  : function
  | template
  ;

text
  : Whitespace+
  | Identifier
  | .+
  ; …
Run Code Online (Sandbox Code Playgroud)

java antlr antlr4

1
推荐指数
1
解决办法
2465
查看次数

标签 统计

antlr ×1

antlr4 ×1

java ×1