大家好,今天小编关注到一个比较有意思的话题,就是关于逆波兰式java语言的问题,于是小编就整理了3个相关介绍逆波兰式j***a语言的解答,让我们一起看看吧。
疑问:求表达式a+b*(c-d)-e/f的波兰式和逆波兰式?
a*b*c → **abc a*b*c+c*d → +**abc*cd (a+b)*((c-d)*e+f) → *+ab+*-cdef 上面是波兰式,逆波兰式如下: a*b*c → ab*c* a*b*c+c*d → ab*c*cd*+ (a+b)*((c-d)*e+f) → ab+cd-e*f+* 写出(a+b)*((c-d)*e+f)转换时栈的变化情况:【注意,右端为栈顶】 读入(,入栈,栈中为(,输出:(空); 读入a,直接输出,栈中为(,输出:a; 读入+,入栈,栈中为(+,输出:a; 读入b,直接输出,栈中为(+,输出:ab; 读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为空,输出:ab+; 读入*,入栈,栈中为*,输出:ab+; 读入(,入栈,栈中为*(,输出:ab+; 读入(,入栈,栈中为*((,输出:ab+; 读入c,直接输出,栈中为*((,输出:ab+c; 读入-,入栈,栈中为*((-,输出:ab+c; 读入d,直接输出,栈中为*((-,输出:ab+cd; 读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为*(,输出:ab+cd-; 读入*,入栈,栈中为*(*,输出:ab+cd-; 读入e,直接输出,栈中为*(*,输出:ab+cd-e; 读入+,【由于此时栈中的*的优先级高于+,所以先将*退栈,然后+入栈】,栈中为*(+,输出:ab+cd-e*; 读入f,直接输出,栈中为*(+,输出:ab+cd-e*f; 读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为*,输出:ab+cd-e*f+; 此时读入已经完毕,栈中还剩一个*,输出:ab+cd-e*f+* 完毕! 以上就是整个从中缀表达式到后缀表达式的过程,栈的变化情况已经都写出来了。
代码的形式是?
1、逆波兰表示 逆波兰表示又称后缀表示法,它是最简单的一种中间代码表示形式,早在编译程序出现之前,它就用于表示算术表达式。
2、四元式 四元式也是一种比较普遍***用的中间代码形式,其形式为:(OP,ARG1,ARG2,RESULT)。其中:OP为运算符,ARG1为第一运算对象,ARG2为第二运算对象,RESULT为运算结果。
3、三元式 三元式表示是与四元式类似的一种表示法,所不同的仅是三元式中没有表示运算结果的部分,凡要涉及到运算结果的均用三元式的位置或序号来代替。
三元式的形式为:(OP,ARG1,ARG2),其中,OP为运算符,ARG1为第一运算对象,ARG2为第二运算对象。运算对象ARG1,ARG2可以是变量名,也可以是三元式的编号。
把高级语言编写源程序变成目标程序,需要经过什么?
一、把源程序转换为目标程序的过程叫编译。
二、什么是编译(compilation,compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
3、编译程序把一个源程序翻译成目标程序的工作过程分为五个:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
到此,以上就是小编对于逆波兰式j***a语言的问题就介绍到这了,希望介绍关于逆波兰式j***a语言的3点解答对大家有用。