如何在词法分析器中构建一个可以在此字符串中处理递归的令牌:
${*anything*${*anything*}*anything*}
答案 0 :(得分:2)
是的,您可以在词法规则中使用递归。
采用以下示例:
${a ${b} ${c ${ddd} c} a}
将通过以下语法正确解析:
parse
: DollarVar
;
DollarVar
: '${' (DollarVar | EscapeSequence | ~Special)+ '}'
;
fragment
Special
: '\\' | '$' | '{' | '}'
;
fragment
EscapeSequence
: '\\' Special
;
正如ANTLRWorks中的解释器所示:
答案 1 :(得分:0)
ANTLR的词法分析器确实支持递归,正如@BartK在帖子中擅长指出的那样,但你只会在解析器中看到一个令牌。如果您需要解释该令牌中的各个部分,您可能希望在解析器中处理它。
IMO,你最好在解析器中做一些事情:
variable: DOLLAR LBRACE id variable id RBRACE;
通过执行上述操作,您将看到所有必要的部分,并可以构建AST或以其他方式处理。