假设我每次匹配一条规则需要运行一些初始化代码,我该如何减少冗余?是否可以堆栈Yacc语法规则代码?
rule : TOKEN1 { init(); token1Code(); }
| TOKEN2 { init(); token2Code(); }
;
而且是有可能做这样的事情
rule : TOKEN1
| TOKEN2
{ codeForToken1OrToken2(); }
;
假设我每次匹配一条规则需要运行一些初始化代码,我该如何减少冗余?是否可以堆栈Yacc语法规则代码?
rule : TOKEN1 { init(); token1Code(); }
| TOKEN2 { init(); token2Code(); }
;
而且是有可能做这样的事情
rule : TOKEN1
| TOKEN2
{ codeForToken1OrToken2(); }
;
您可以使用类似:
rule : { init(); } real_rule { codeForToken1or2(); } ;
real_rule : TOKEN1 { token1Code(); }
| TOKEN2 { token2Code(); }
;
但是,这可能会引入冲突,这取决于如何“规则”被使用。
因为这将真正的工作:
rule : TOKEN1 { getToken(); init(); token1Code(); }
| TOKEN2 { getToken(); init(); token2Code(); }
;
其中为gettoken();是匹配输入中下一个标记的函数的名称(我不记得函数的名称),你可以调用一些init();里面有。
你似乎没有回答这个问题。 – 2009-11-20 04:14:29
这个语法不同于DevDevDev发布 – eKek0 2009-11-20 01:04:19
它接受相同的语言,所以它相当于 – 2009-11-20 01:06:15
你发布的原文不是同一种语言。现在,你已经纠正了错误 – eKek0 2009-11-20 01:07:40