我是 ANTLR 的初学者,我需要修改现有的复杂语法。
我想创建一个规则来保留一个块而不用其他规则解析。为了更清楚,我需要将用 c++ 编写的代码插入到解释代码中。
编辑 2013 年 11 月 2 日
经过多次测试,这是我的语法,我的测试,我得到的结果,以及结果和想要的:
语法
cppLiteral
: cppBegin cppInnerTerm cppEnd
;
cppBegin
: '//$CPP_IN$'
;
cppEnd
: '//$CPP_OUT$'
;
cppInnerTerm
: ( ~('//$CPP_OUT$') )*
;
测试
//$CPP_IN$
txt1 txt2
//$CPP_OUT$
结果
cppLiteral ->
cppBegin = '//$CPP_IN$'
cppInnerTerm = 'txt1' 'txt2'
cppEnd = '//$CPP_OUT$'
预期结果
cppLiteral ->
cppBegin = '//$CPP_IN$'
cppInnerTerm = 'txt1 txt2'
cppEnd = '//$CPP_OUT$'
(对不起,我不能发布AST的图像,因为我没有10个声望)
“cppBegin”、“cppInnerTerm”和“cppEnd”这三个标记可以在一个标记中,如下所示:
cppLiteral
: '//$CPP_IN$'( ~('//$CPP_OUT$') )*'//$CPP_OUT$'
;
得到这个结果:
cppLiteral = '//$CPP_IN$\n txt1 txt2\n //$CPP_OUT$'