My understanding is that in Lex/Bison, the lexical analysis is done by lex, the syntaxical by the rules of Bison, and the semantic one by the actions of Bison.
(我的理解是,在Lex / Bison中,词法分析由lex完成,语法分析由Bison规则完成,语义分析由Bison的动作完成。)
Is it then possible to go back from the semantic analysis, ie the actions, to the syntaxical one ?
(那么是否有可能从语义分析(即动作)返回到语法上的动作呢?)
One exemple would be that : suppose I want to be able to detect pseudo-C as "i++", "i=i+1","i=i+2".
(一个示例是:假设我希望能够将伪C检测为“ i ++”,“ i = i + 1”,“ i = i + 2”。)
But I want that "i=i+1" to be reduce as "i++", and "i=i+2" to be a second rule. (但是我希望将“ i = i + 1”减少为“ i ++”,而将“ i = i + 2”作为第二个规则。)
Is it the possible to do something like that : (是否可以做这样的事情:)
identifier_plusplus: IDENTIFIER '+' '+'
add: IDENTIFIER '=' IDENTIFIER '+' NUMBER {if($1 == $3 && $5 == 1) REDUCE_IN(identifier_plusplus);}
Here, it is not very usefull, but in a case where I use identifier_plusplus in another rule, it could be very powerfull.
(在这里,它不是很有用,但是在我在另一条规则中使用identifier_plusplus的情况下,它可能会非常强大。)
EDIT : An example where it can be usefull would be if I have another rule that catch For loops which increment one by one.
(编辑:一个可能有用的示例是,如果我有另一个规则来捕获一个递增一个的For循环。)
I would like to type something as : (我想输入以下内容:)
for_one: FOR '(' IDENTIFIER '=' '0' ';' IDENTIFIER '<' CONST ';' IDENTIFIER PLUSPLUS ')' exprs
With no care if I wrote i++ or i=i+1.
(不管我写i ++还是i = i + 1。)
Is it more clear now ?
(现在更清楚了吗?)
(please excuse my english...) ((请原谅我的英语...))
Thank you in advance.
(先感谢您。)
ask by EzrielS translate from so 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…