文法和语言总结与梳理

  文法的类型是自从乔姆斯基建立的描述,他把文法分成4种类型,即0(文法)1(上下文有关的)2(上下文无关的)3(正规文法)。这几类文法的差别在于对产生式施加不同的限制。他的定义是令G是一个文法,S是文法的开始符号,abo的是文法G的一个句型。如果有S-*→aAo且(A-+→b测标b是句型abo相对于非终结符A的短语。特别地,如果有(A→β是句型abo相对于规则A→b的直接短语(也称简单短语)。一个右句型的直接短语称为该句型的句柄。句柄的概念只适合于右句型。

  句型的分析是对于上下文无关文法,语法树是句型推导过程的几何表示。语法树确实将所给句型的结构很直观地显示出来了。语法树是句型结构分析的极好工具。而这里所说的句型分析问题,是说如何知道所给定的符号串是文法的句型。句型的分析就早识别一个符号串是否为某文法的句型,是某个推导的构造过程。进一步说,当给定一个符号串时,试图按照某文法的规则为该符号串构造推导或语法树,以此识别出它是该文法的一个句型;当符号串全部由终结符号组成时,就是识别它是不是某文法的句子。因此也有人把语法树称为语法分析树分析树。对于程序设计语言来说,要识别的是程序设计语言的程序,程序是定义程序设计语言的文法的句子。句型分析是一个识别输入符号串是否为语法十正确的程序的过程。在语言的编译实现中,把完成句型分析的程序称为分析程序识别程序,分析算法又称识别算法。

 

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

整数n

标识符i

表达式e

条件语句

赋值语句

复合语句

函数

程序

...

整数n  <数字> => 0|1|2…7|8|9

标识符i    <标识符> → <字母>{<字母>|<数字>}

表达式e   <表达式> →  [+|-]<项>{<加减运算符><项>}

条件语句  <条件语句> → if<条件>then<语句>

赋值语句  <赋值语句> → <标识符>:=<表达式>

复合语句  <复合语句> → begin<语句>{;<语句>}end

赋值语句  <赋值语句> → <标识符>:=<表达式>

程序       〈程序〉→〈分程序〉.

         〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉

原文地址:https://www.cnblogs.com/hoioh/p/11600320.html