****** 八 ******、软设笔记【程序语言设计】-语法分析、语义分析...、程序语言的控制

*初始状态
*终止状态(接收状态):
*后继状态:有限状态机在读入一个字符时,其状态改变为另一状态,则改变后的状态被称为后继状态。


如果有限状态机每次装换后的状态是唯一的则称之为确定有限状态自动机(DFA);如果转换后的后继状态不是唯一的则称之为不确定有限自动机(NFA)


2.语法分析阶段
语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,按语法规则分析检查每条语句是否只有正确的逻辑结构。
int arr[2], b;
b = arr * 10;
语法分析的方法:
*自上而下分析法
*自下而上分析法


3.语义分析阶段
语义分析阶段主要是检查检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只用语法和语义都正确的源程序才能翻译成正确的目标代码。
语义分析的主要工作是进行各类型分析和检查。赋值语句的右端和左端的类型不匹配。表达式的除数是否为零等。
int arr[a], b;
b = arr * 10;


4.中间代码生成阶段
中间代码生成阶段的工作是根据语义分析的输出生成中间代码。
*中间代码是一种简单且含义明确的记号系统,可以有若干种形式,常见的有逆波兰记号、四元式、三元式和树。
*他们的共同特征是代码的方式与具体的机器无关。


5.代码优化阶段
代码优化阶段是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高级,即省时间和省空间。


6.目标代码生成阶段
是把中间的代码变换成特定机器上的绝对指令代码或者可重定位的指令代码或者汇编指令代码。这是编译的最后阶段,它的工作与硬件系统的结构和指令的含义有关。






程序语言的控制结构
一、表达式
*前缀表达式:也被称为波兰表示法,器特点是将操作符置于操作数之前,如:- X + 3 4 5 6。
*中缀表达式:即我们常用的表示方法,( 3 + 4 ) x 5 - 6 。
*后缀表达式:有被称为逆波兰法,其特点是将操作符置于操作数之后,3 4 + 5 x 6 - 。




1.前缀表达式
从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符是,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如前缀表达式 “ - x + 3 4 5 6 ” ;


2.中缀表达式(中缀记法)
中缀表达式是一种通用的算术或者逻辑公式表示方法,操作符以中缀形式处于操作树的中间。中缀表达式是人们常用的算术表示方法。
虽然人的大脑很容易理解与分析中缀表达式,但是对计算机涞水中缀表达式却是很复杂的,因此计算表示式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。


3.后缀表达式
与前缀表达式类似,只是顺序是从左至右:
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如后缀表达式 "3 4 + 5 x 6 -" ;




二、操作符的优先级
*指针最优,单目运算优于双目运算。如正负号。
*先乘除(模),后加减。
*先算术运算,后移位运算,最后位运算。
1 << 3 + 2 & 7等价于(1 << (3 + 2)) & 7
*逻辑运算最后计算。


四、过程控制
int Funciton 1(int x, int y){
......
}


参数传递的方式
*传值调用 -- 数据传送是单向的
*引用调用(地址调用)--数据传送是双向的









posted @ 2018-05-11 18:22  CHANGEMAX  阅读(82)  评论(0编辑  收藏  举报