2019/09/25-作业04

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

符号串:符号的又穷序列称为符号串。有字母表中的任意符号组成的序列都是符号串。什么符号也不包含的符号串称为空符号串,以希腊字母 ε 表示。

句子:仅含有终结符的句型是文法的一个句子。

文法:文法是定义描述语言的语法结构的一组形式规则,

  一个程序语言的文法之目的就是用适当条数的语法规则把该程序语言的全部成分描述出来,

  分为0 型文法(短语文法)、1 型文法(上下文有关文法)、2 型文法(上下文无关文法 | 左线性文法)、3 型文法(右线性文法 | 正规文法)

  四种文法之间的关系:

    

语言:文法的所有的句子的集合就是该文法所对应的语言。

语法树:在自然语言中,可通过树形表示直观地分析句子的结构;在形式语言中,则是通过语法树直观地分析文法的句型结构。

  设文法G[S] = (Vn,Vt,P,S),对于文法G[E] 的任意一个句型都存在一个相应的语法树。

短语:一个句型的语法树中任一子树叶节点所组成的符号串都是该句型的短语。

直接短语:短语包含直接短语,可以直接在短语中判断。

递归:递归规则:在规则的左部和右部具有相同非终结符的规则

  文法递归:对文法中的任一非终结符,若能建立一个推导过程使得右部再次出现该非终结符,则文法是递归的。如:U->Vx, V->Uy|z,

  虽然这两个规则都不是递归规则,但组成的文法是递归文法U->Vx->Uyx。所以含有递归规则的文法一定是递归文法,而递归文法不一定含有递归规则。

最左推导:如果 a=>b,并且在每“一步推导”中,都替换a中最左边的非终结符号,则称这样的推导为最左推导。

  E => E+T => T+T => F+T => i+T => i+F => i+i

最右推导:如果 a   b,并且在每“一步推导”中,都替换a中最右边的非终结符号,则称这样的推导为最右推导,也称为规范推导。

  E => E+T => E+F => E+i => T+i => F+i => i+i

二义性:如果一个文法的某个句子有不止一棵分析树,则这个句子是二义性的句子,含有二义性句子的文法是二义性的文法。

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

猜你喜欢

转载自www.cnblogs.com/Roromiya/p/11595704.html
今日推荐