语法分析

本文主要介绍了编译原理中的语法分析,希望对您有所帮助

一. 完成的功能

输入:所给文法的源程序字符串

输出:success or error

例:测试案例

1
2
3
4
begin 
x:=9;
x:=2*x+1/3
end #

二. 主体框架

  1. 主函数

  2. 递归下降分析

  3. 语句串分析

  4. statement语句分析

  5. expression表达式分析

  6. term分析

  7. factor分析

三. 重难点

  1. 了解递归下降程序的一般形式

    • 当遇到终结符时 if(..==..) scaner();

    • 当遇到非终结符时 调用该非终结符的函数

    • 当遇到推 ε 时

      ​ if(当前符号不属于对应的follow集) error()

  2. 列出BNF表示法式子

    (1)<程序>::=begin<语句串> end

    (2)<语句串>::=<语句>{;<语句>}

    (3)<语句>::=<赋值语句>

    (4)<赋值语句>::=ID:=<表达式>

    (5)<表达式>::=<项>{+<项>|-<项>}

    (6)<项>::=<因子>{*<因子>|/<因子>}

    (7)<因子>::=ID | NUM | {<表达式>}

  3. 如果分析的语法过于复杂则BNF表示的式子也会过多 导致编写困难

四. 收获

​ 首先更加清晰的理解了语法分析的主要任务,它是在词法分析的基础上将单词组合起来,组成一些语句,其次是理解了递归下降分析法,它是一种自顶向下的分析,根据文法来构造递归函数,代码简单直观,易于编写,但是对文法要求必须是LL(1)文法,由于递归调用次数会较多,影响分析的效率。


语法分析
http://kaikai12321.github.io/2021/05/02/语法分析/
作者
Hou Kai
发布于
2021年5月2日
许可协议