急求:布尔表达式的翻译程序(算符优先,输出四元式)
如题!非常感谢~
[解决办法]
this world is too small
[解决办法]
不会,帮顶。 呵呵。
[解决办法]
不懂这个名词。
[解决办法]
布尔表达式什么意思
算术,逻辑,关系听过
四元式的概念,记得大概是 <算符,对象1,对象2,运算结果> 这样的序列
[解决办法]
1:
找这本书:
http://book.chinaunix.net/showbook.php?id=24605
里面有可以参考的程序
[解决办法]
2.
看这里:
http://dev.10026.com/c/c++/20056305604_5F4093642.shtml
有一些讨论结果在了。
PS:
所谓布尔表达式,是指用布尔运算符号(and,or not)作用到布尔变量或关系表达式上而组成的。其中,关系表达式形如E1 relop E2,其中,E1和E2是算数表达式,relop是关系运算符( <, <=,=,!=,> ,> =)。
[解决办法]
楼主,按照虫子斑竹的说法去找,没错的,up^_^
[解决办法]
搞本编译原理,看到上下文无关的语法分析,应该就ok了
[解决办法]
既然yacc能做,你就用yacc得到c/c++代码嘛。boost::spirit也是yacc库
[解决办法]
哈哈
我的课程设计就是这个
但是我写的是逆波兰式,,而且也只是简单优先法来进行语法分析的
要不要,LZ?
[解决办法]
好热闹。。。
[解决办法]
ohmygod!
[解决办法]
OMG
[解决办法]
翻译模式(E.plcae:保存E值的名字;emit:输出;newtemp:产生一个新的临时名字;relop:关系运算符;id:标识符):
E-> E1 or E2{E.place:=newtemp
emit(E.place ':= 'E1.place 'or ' E2.place)}
E-> E1 and E2{E.place:=newtemp
emit(E.place ':= 'E1.place 'and ' E2.place)}
E-> not E1{E.place:=newtemp
emit(E.place ':= ' 'not ' E2.place)}
E-> true{E.place:=newtemp
emit(E.place ':= ' '1 ')}
E-> false{E.place:=newtemp
emit(E.place ':= ' '0 ')}
E-> id1 relop id2{E.place=newtemp
emit( 'if ' id1.place relop id2.place 'goto ' nextstat+3);
emit(E.place= '0 ');
emit( 'goto ' nextstat+2);
emit(E.place ':= ' '1 ')}
=======================================================================
这里给出一个根据上面翻译模式对表达式a <b or c <d and e <f的翻译:
0:if a < b goto 3
1:t1=0
2:goto 4
3:t1:=1
4:if c <d goto 7
5:t2:=0
6:goto 8
7:t2:=1
8:if e <f goto 11
9:t3:=0
10:goto 12
11:t3:=1
12:t4:=t2 and t3
13:t5:=t1 or t4
当然可以优化一下:
if a <b goto Ltrue
goto m
m:if c <d goto n
goto Lfalse
n:if e <f goto Ltrue
goto Lfalse
都用了两次遍历,采取了回填
[解决办法]
LZ,你又不给我你的邮箱
700多行的代码,怎么发到这个上面啊?
你现在不会也是在弄课程设计吧!
[解决办法]
说说你是谁?