Parameters 带参数的ANTLR3运算符
首先,我知道这个名字听起来有点奇怪,但我不知道怎么称呼它。如果有人比我有更好的想法,请编辑 现在,问题是:Parameters 带参数的ANTLR3运算符,parameters,antlr,operator-keyword,antlr3,Parameters,Antlr,Operator Keyword,Antlr3,首先,我知道这个名字听起来有点奇怪,但我不知道怎么称呼它。如果有人比我有更好的想法,请编辑 现在,问题是: 我有一个相当旧的语法,我需要适应一个新的要求 旧表格如下所示: “第一文本”*“第二文本” 基本上就是做一些文本操作。不管发生什么事。让我们假设它连接文本。这将生成一个非常基本的树,其中文本作为叶子,操作符作为根 现在,新的请求是通过指定需要连接的字母数来“参数化”连接操作。新表单应如下所示: “第一文本”*(3)“第二文本” 这意味着它必须从第一个文本中提取前3个字符,从第二个文
- 我有一个相当旧的语法,我需要适应一个新的要求
- 旧表格如下所示: “第一文本”*“第二文本”
- 现在,新的请求是通过指定需要连接的字母数来“参数化”连接操作。新表单应如下所示: “第一文本”*(3)“第二文本”
第一个文本
中提取前3个字符,从第二个文本
中提取前3个字符
- 此外,新语法还需要与旧格式兼容(参数/语法不是强制性的)
- 我实现了一个
类,该类为每个节点生成我自己的类的实例(CommonTreeAdaptor
)。有点像工厂。我可以向指定用于处理运算符的对象添加新属性。假设它是QNode
QNodeStar
- 语法如下所示: 语法 代币{ COMPUTEOP='*'; } 公开的 topexpr :expr SEMI->^(根expr) ; expr :CRIT(计算^CRIT)* ; 碎片暴击 :“‘’(‘a’、‘z’|‘a’、‘z’|‘0’、‘9’)+’” ; 计算 :(COMPUTEOP | COMPUTEOP LPAREN!INT RPAREN!) ;
因此,我的问题是,我如何使'dissapear'成为COMPUTE definition中的INT参数,并自动
将其移动到criteria节点(QNodeStar
),而无需更改树布局和语法定义文件
更新:有关如何获取树的示例:
1:“a”*“b”
好吧,如果我扔掉参数(3
),我将无法告诉如何“执行”操作符,对吗?操作员*(3)
将与操作员*
相同,并且不会有任何收益。表达式可能更复杂(例如:“a”*(1)(“c”*(7)“d”);
),因此我需要以某种方式将其绑定到节点。是的,我需要扩展当前功能,语法非常复杂,我希望尽可能保持一致。
...
*
/ \
"a" "b"
*
/ \
"c" "d"
*
/ | \
"c" 3 "d"