我有一个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)