我定义了一个 ANTLR4 语法,其中词法分析器和解析器位于两个不同的文件中。它是一种类似于 XML 的语法。在我的解析器中,我也想定义一个可以重复使用自身用于计算目的的表达式(如“(1+1)*2”)。
parser grammar TestExpressionParser;
options { tokenVocab=TestExpressionLexer; }
compileUnit : calculator ;
calculator : '<' 'calculator' '>' tiers? rules?'</' 'calculator' '>' ;
// tiers
tiers : '<' 'tiers' '>' tier* '</' 'tiers' '>' ;
tier : '<' 'tier' attrReference '>' '</' 'tier' '>' ;
// rules
rules : '<' 'rules' '>' (rule) '</' 'rules' '>' ;
rule : '<' 'rule' '>' (calculation|reference|description)* '</' 'rule' '>' ;
calculation : '<' 'calculation' '>' expression '</' 'calculation' '>' ; …Run Code Online (Sandbox Code Playgroud)