正在加载图片...
当逆波兰式允许单目运算符(仅允许一个运算对象的运 算符)出现时,会产生一些问题。如写出表达式a+(-bcd)*e 的逆波兰式为ab-cd/e*,此时很难区分运算符-是单目的还是 双目的。即先计算a-b还是-b。解决上述问题的方法有二种: (1)把单目运算符改成双目,如改写成:a0b-cd/e* (2)引进新的运算符为@,如:ab@cd/"e* 其它单元目的运算符可参照上述方法处理。对于第一种方法 把单目运算符处理成双目运算符增加了运算的时间,降低 工作效率。对于第二种方法,要解决的问题是如何把符号 处理成不同的符号。处理的时机可以放在词法分析中解决, 如在表达式的起始位(如赋值号后、逗号后、左括号后等) 设置标记19为1,即单元且运算符,在遇到运算对象后设置 标记fag为0,即双目运算符当逆波兰式允许单目运算符(仅允许一个运算对象的运 算符)出现时,会产生一些问题。如写出表达式a+(-b*c/d)*e 的逆波兰式为ab-cd/*e*,此时很难区分运算符-是单目的还是 双目的。即先计算a-b还是-b。解决上述问题的方法有二种: (1) 把单目运算符改成双目,如改写成:a0b-cd/*e* (2) 引进新的运算符为@,如:ab@cd/*e* 其它单元目的运算符可参照上述方法处理。对于第一种方法, 把单目运算符处理成双目运算符增加了运算的时间,降低了 工作效率。对于第二种方法,要解决的问题是如何把符号‘- ’处理成不同的符号。处理的时机可以放在词法分析中解决, 如在表达式的起始位(如赋值号后、逗号后、左括号后等) 设置标记flag为1,即单元目运算符,在遇到运算对象后设置 标记flag为0,即双目运算符
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有