第四次作业 编译原理的文法和语言总结与梳理

  1. 梳理第二章的内容,写一篇理解与总结。

第二章我们学习了文法和语言,文法产生的所有句子的集合就构成了语言,句子是句型的特例,句子全由终结符构成的。还有文法和语言的形式定义:

G是文法,S是识别符,我们可以写成G:S->0S1G[S]:S->0S1

                                                                     S->01            S->01

还有就是上下无关文法的句型推导的直接工具,语法树。短语就是一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语;直接短语就是如果子树中不再包含其他的子树;句柄就是直接短语中的最左直接短语为该句型的句柄。我们也做过不少练习,对语法树的推导还是有一定的理解的。我还是要加强练习和学习更多的知识。

 

2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)

  1.     <程序 >::=< 分程序 >.
  2.   <分程序 >::=[< 常量说明部分 >][< 变量说明部分 >][< 过程说明部分 >]< 语句 >
  3.   <常量说明部分 >::=CONST< 常量定义 >{,< 常量定义 >};
  4.   <常量定义 >::=<标识符 >=< 无符号整数 >
  5.   <无符号整数 >::=< 数字 >{< 数字 >}
  6.   <变量说明部分 >::=VAR< 标识符 >{,< 标识符 >};
  7.   <标识符 >::=< 字母 >{< 字母 >|<数字 >}
  8.   <过程说明部分 >::=< 过程首部 ><分程序 >{;< 过程说明部分 >};
  9.   <过程首部 >::=PROCEDURE< 标识符 >;
  10.   <语句 >::=< 赋值语句 >|<条件语句 >|<当型循环语句 >|<过程调用语句 >|<读语句 >|<写语句 >|<复合语句 >|<空 >
  11.   <赋值语句 >::=<标识符 >:=< 表达式 >
  12.   <复合语句 >::=BEGIN< 语句 >{;< 语句 >}END
  13.   <条件 >::=< 表达式 ><关系运算符 ><表达式 >|ODD< 表达式 >
  14.   <表达式 >::=[+|-]< 项>{< 加法运算符 ><项>}
  15.   <项>::=< 因子 >{< 乘法运算符 ><因子 >}
  16.   <因子 >::=< 标识符 >|<无符号整数 >| ‘(’<表达式 > ‘)’
  17.   <加法运算符 >::=+|-
  18.   <乘法运算符 >::=*|/
  19.   <关系运算法 >:===|#|<|<=|>|>=
  20.   <条件语句 >:=IF< 条件 >THEN< 语句 >
  21.   <过程调用语句 >::=CALL< 标识符 >
  22.   <当型循环语句 >::=WHILE< 条件 >DO< 语句 >
  23.   <读语句 >::=READ ‘(’<标识符 >{,< 标识符 >} ‘)’
  24.   <写语句 >::=WRITE ‘(’<表达式 >{,< 表达式 >} ‘)’
  25.   <字母 >::=a|b|,, |X|Y|Z
  26.   <数字 >::=0|1|2|,, |8|9

 

原文地址:https://www.cnblogs.com/cndl/p/11587248.html