语法分析笔记自顶向下分析
来源:互联网 发布:质量效应2最美捏脸数据 编辑:程序博客网 时间:2024/06/05 03:50
进行完词法分析紧接着进入语法分析阶段。语法分析判断一个句子是否合乎语言的文法规则,语法分析阶段的数学元素为:
终结符:数字(1~9),字母(a~z),运算符等字(+ - x /)符。
非终结符:一个抽象化的句子以大写字母表示如:S,R,A,B;
产生式:S-->aB B---->Fb+ F------>i 产生式规定了语言的文法。
初始符:S;通常为第一个产生式的最左的非终结符。
语法分析分为自顶向下的语法分析和自底向上的语法分析。
自顶向下的分析为由最上面的非终结符根据产生式推导出最终表达式。
自底向上的分析为根据产生式由表达式归约成初始符。
LL(1)文法:自左向右,最左推导文法。所谓文法就是产生式符合某种规则。
如何判断一个文法是否具有二义性,通过判断是否为LL(1)就可得出,LL(1)规定每个产生式对应一个节点。
自顶向下的语法分析需要文法没有二义性。二义性就是一个表达式不能由两颗语法树推出。如果产生式含有左递归和左公共因子,则要先消除再进行语法分析。
自顶向下语法分析的两种实现:
1:递归下降分析法
根据产生式,将每个非终结符作为一个函数。利用递归调用的方式分析输入的句子。该方法由于递归调用的原因,对系统资源消耗大,基本不使用这种方法。
2:预测分析法
第一步,求预测分析表
根据产生式,求出每一个非终结符的FIRST集合和FOLLOW集合。以终结符作为行,非终结符作为列,填入按照FIRST集合中求出的每个终结符对应的每个产生式。
如果FIRST集合中含有∑,则将非终结符的FOLLOW集合中每一个终结符和该非终结符对应行列中填入该非终结符的∑产生式。
第二步,压栈分析。
1:在栈中首先压入一个$符号和初始非终结符,分析串指针指向第一个字符,
2:将第一个字符和栈首符号比较,若为终结符且和字符相等,则匹配成功。弹出栈首字符,指针向右一个字符。
3:若为非终结符则查表,若字符和非终结符对应的下面没有产生式,则报错。
4:若有产生式,则将产生式右边反向压入栈中。回到第二步。直到栈元素为$符号,字符串分析完毕。
- 语法分析笔记自顶向下分析
- 语法分析 自顶向下分析
- 自顶向下的语法分析(修改)
- 简述自顶向下的语法分析
- 自顶向下的语法分析(修改)
- <编译原理>自顶向下语法分析
- 自顶向下的语法分析–递归下降分析–表达式求值
- 【编译原理】自顶向下的语法分析之递归下降分析法
- 语法分析:自顶向下 vs 自底向上
- 一个简单的自顶向下语法分析(表达式求值)
- 编译原理结构框架4自顶向下的语法分析
- 自顶向下的语法分析LL(1)
- 第4章 自顶向下语法分析方法
- 编译原理中的语法分析——自顶向下
- 编译原理之自顶向下语法分析方法
- 自顶向下语法分析原理与设计思想
- 自顶向下语法分析方法:LL(1)文法的判别
- 自顶向下语法分析方法:提取左公共因子
- 文件路径分隔符
- JS中alert Number对象输出object解答
- 二分查找
- Myeclipse 代码补全提示设置方法及注释模板
- 转:Myeclipse快捷键设置
- 语法分析笔记自顶向下分析
- 快速取得select选中的selected option的值
- 创建对象一种方法
- MySql遇到乱码问题解决。
- 访问其他计算机共享盘符
- Java 文件和byte数组转换
- 扫描IPHONE本地音乐文件,获得音乐名,歌手名代码示例
- mac开机没有声音怎么办。
- 循序渐进PostgreSQL(三): 网络访问配置、用户及角色管理、表空间及数据库创建