赞
踩
低级语言:汇编语言和机器语言
高级语言:Java,c++,Python…
脚本语言是动态语言(也是弱类型语言),PHP,JS,Python
java既是编译也是解释型
符号表:不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
词法分析:识别句子中的一个个单词,输入:源程序 输出:记号流(单词符号)
语法分析:分析句子的语法结构 输入:记号流 输出:语法树
语义分析:分析句子的含义,检查是否包含静态语义错误
静态语义:编译阶段检查
静态语义方法:语法指导翻译
静态语义错误:比如类型不匹配,int a = “123”;
动态语义:运行时才能检查
中间代码生成:进行初步的翻译
代码优化:对译文进行修饰
目标代码生成:写出最后的译文
for循环无限循环
*号表示循环(0到多次),|号表示或
正规式要能表达出相应文法,但不能多,范围不能更大
正规集可以用正规式描述,用有限自动机识别。
有限自动机是词法分析的一个工具,它能正确地识别正规集,识别一个字符后,转移一下
两个圆圈是终态,识别完后,一定在终态上
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的。比如字符为1,转移的路径有多条可以去选
上下文无关文法广泛的表示语言的语法规则
规则:a?b(中缀) 变 ab?(后缀)
例子:中缀:1+2 后缀:1 2 +
利用栈
abcd-/× 从左至右放入栈
遇到符号,按栈的规则将数字提出来
栈底 abcd 栈口
中缀表达式变后缀表达式
左优先原则是怎么来的?
计算机从左至右读取值,读到计算符号时,只能比较相邻的两个符号的优先级,不能跨符号比较。
例上图中:A + B -C,+ 和 -遇到了,根据符号等级规则和左优先的原则去比,首先+和-的符号等级相同,那么就根据左优先原则,+号是第1位,然后 - c ,- 和 * 遇到了,则的优先级更大为第二位,再然后 - 和 /遇到了,/的优先级更大为第三位,再然后 - 和 +遇到了,根据符号等级规则和左优先的原则去比,首先+和-的符号等级相同,-在+的左边,-的优先级为第四位
1.从左向右看,两个符号看,根据符号等级规则和左优先的原则去比,然后写好符号等级序号
2.按符号等级排序依次转成中缀表达式
后缀表达式怎么变中缀表达式
从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数
利用栈
abcd-/× 从左至右放入栈
遇到符号,就按栈的规则将数字提出来
栈底 abcd 栈口 ; 未放入的元素:-/× ; 先出栈的是右操作数,后出栈的是左操作数
中缀表达式变后缀表达式
左优先原则是怎么来的?
计算机从左至右读取值,读到计算符号时,只能比较相邻的两个符号的优先级,不能跨符号比较。
例上图中:A + B -C,+ 和 -遇到了,根据符号等级规则和左优先的原则去比,首先+和-的符号等级相同,那么就根据左优先原则,+号是第1位,然后 - c ,- 和 * 遇到了,则的优先级更大为第二位,再然后 - 和 /遇到了,/的优先级更大为第三位,再然后 - 和 +遇到了,根据符号等级规则和左优先的原则去比,首先+和-的符号等级相同,-在+的左边,-的优先级为第四位
1.从左向右看,两个符号看,根据符号等级规则和左优先的原则去比,然后写好符号等级序号
2.按符号等级排序依次转成中缀表达式
后缀表达式怎么变中缀表达式
从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数
利用栈
abcd-/× 从左至右放入栈
遇到符号,就按栈的规则将数字提出来
栈底 abcd 栈口 ; 未放入的元素:-/× ; 先出栈的是右操作数,后出栈的是左操作数
中缀式:语法树中序遍历可以得出中缀式,左根右
后缀式:语法树后序遍历可以得出后缀式,左右根
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。