cjaizss 发表于 2009-07-22 01:40


S : s_12345;
s_1 : F P N;
P_1 : P s_1 P | P s_1 P_1;
s_2 : F P_1 N;
P_12 : P | P s_12 P_12;
P_2 : P_12 s_2 P_12;
s_3 : F P_2 N;
P_123 : P | P s_123 P_123;
P_3 : P_123 s_3 P_123;
s_4 : F P_3 N;
P_1234 : P | P s_1234 P_1234;
P_4 : P_1234 s_4 P_1234;
s_5 : F P_4 N;
s_12 : s_1 | s_2;
s_123 : s_12 | s_3;
s_1234 : s_123 | s_4;
s_12345 : s_1234 | s_5;

F接受FOR
P接受省略号代表的指令
N接受NEXT
以上仓促的写法有严重问题,LALR(1)下势必产生reduce-reduce conflict,明天晚上仔细想想怎么写。
其实这种问题比较好的做法可能是用一个变量来代表层数,代码自然也不会像上面这么复杂,并且比较自然。

liuzq71 发表于 2009-07-28 12:26

cjaizss版主,上面的产生式还能化简一下么?

cjaizss版主,上面的产生式还能化简一下么?
谢谢

cjaizss 发表于 2009-07-28 12:49

原帖由 liuzq71 于 2009-7-28 12:26 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
cjaizss版主,上面的产生式还能化简一下么?
谢谢
不太能简化了.
我的建议还是那样,不要用这样的形式写.
用一个标志变量来代表层数,间接的来表示语法,这样才是王道.

liuzq71 发表于 2009-07-29 07:51

cjaizss版主,cjaizss版主,能具体说一下这个层数变量怎样使用么?谢

cjaizss版主,能具体说一下这个层数变量怎样使用么?谢

cjaizss 发表于 2009-07-29 08:59

呵呵,你自己想想怎么做呢?光依靠别人帮你解决提高不了啊.

liuzq71 发表于 2009-07-29 10:08

是啊,一直依赖人家不好啊,
问题是,我用yacc做这个PLC用户程序的语法识别,已经完成了很大一部分了,并且yacc中无法随心所欲啊

cjaizss 发表于 2009-07-31 11:08

仔细想想语法分析的过程,相信你可以想出来办法的:)
页: 1 [2]
查看完整版本: PLC中的FOR...NEXT指令,yacc的产生式如何写?