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

        一种语言必定他的文法去描述,它的完整定义包括语法和语义两个方面。语言和语法是指一组规则,用它可以形成和产生一个合适的程序。目前广泛使用的是上下文无关文法,也就是用上下文无关文法作为程序设计的描述工具,比如用A:=B+C表示是一个合法的赋值语句,则A:=B+就不是合法的赋值语句。

  什么是文法?文法相当于语言学(人类语言)中的语义分析,即分析一个句所表示的含义。它是产生中间代码或目标代码的依据。

 文法定义:

 文法G定义为四元组(Vn,VT,P,S):

  VN:为非终结符(语法实体,或变量)集,常用大写字母表示;

  VT:为终结符,常用小写字母表示;

  P:为规则的集合,规则的左边属于V并且至少包含一个非终结符;

  S:为识别符或是开始符,是一个非终结符,至少要在一条规则中作为左部出现。

  推导是正向推导,归约是逆向推导。

  文法类型:

   0型文法/无限制文法:α->β,其中α∈(Vn∪Vt)*且至少含有一个非终结符,β∈(Vn∪Vt)*。
   1型文法/上下文有关文法:αAβ->αuβ,其中A∈Vn,α,β∈(Vn∪Vt)*,u∈(Vn∪Vt)+。
   2型文法/上下文无关文法:A->β,其中A∈Vn,β∈(Vn∪Vt)*。常用于句法分析。
   3型文法/正规文法:常用于词法分析

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

由于不是很会就把规则列出来了。

<程序>  -> <分程序>
<分程序> -> [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句>
<常量说明部分> -> CONST<常量定义>{ ,<常量定义>}; 
<常量定义> -> <标识符>=<无符号整数> 
<无符号整数> -> <数字>{<数字>} 
<变量说明部分> -> VAR<标识符>{ ,<标识符>}; 
<标识符> -> <字母>{<字母>|<数字>} 
<过程说明部分> -> <过程首部><分程度>;{<过程说明部分>} 
<过程首部> -> procedure<标识符>; 
<语句> -> <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空> 
<赋值语句> -> <标识符>:=<表达式> 
<复合语句> -> begin<语句>{ ;<语句>}<end> 
<条件> -> <表达式><关系运算符><表达式>|odd<表达式> 
<表达式> -> [+|-]<项>{<加减运算符><项>} 
<项> -> <因子>{<乘除运算符><因子>} 
<因子> -> <标识符>|<无符号整数>|(<表达式>) 
<加减运符> -> +|- 
<乘除运算符> -> *|/ 
<关系运算符> -> =|#|<|<=|>|>= 
<条件语句> -> if<条件>then<语句> 
<过程调用语句> -> call<标识符> 
<当型循环语句> -> while<条件>do<语句> 
<读语句> -> read(<标识符>{ ,<标识符>}) 
<写语句> -> write(<标识符>{,<标识符>}) 
<字母> -> a|b|c…x|y|z 
<数字> -> 0|1|2…7|8|9 

posted on 2019-09-27 19:49  俞英杰  阅读(316)  评论(0编辑  收藏  举报