1. 梳理第二章的内容,写一篇理解与总结。
第二章:文法和语言
总结:文法即用来描述语言语法的工具
重要知识点:文法的形式定义、 上下文无关文法、正规文法 推导、短语、分析树、二义性
文法的形式定义:文法又称语法,即从形式上描述和规定语言结构,而通过建立语法规则(产生式)可以用来描述如何产生句子,又由产生式可以来推导句子,其推导过程的语法产生的语法树又叫做推导树。
上下文无关文法:所定义的语法单位完全独立于这种语法单位可能出现的上下文环境,许多语法单位的结构可以用上下文无关文法来描述。
例:描述算术表达式的文法G: G=({i,+,-,*,/,(,)},{<表达式>,<项>,<因子>},<表达式>,&)
其中&: <表达式>-><表达式>+<项> | <表达式>-<项> | <项> <项>-><项>*<因子> | <项>/<因子> | <因子> <因子>->(<表达式>) | i
正规文法 推导:
短语:对于文法G=(VT,VN,S,&),假定aB&是文法G的一个句型,
如果存在:S *->aA&,并且 A +->B,则称B是句型aB&关于非终结符号A的短语。
分析树:推导的图形表示,又称推导树。
二义性 :如果一个文法的某个句子有不止一棵分析树,则这个句子是二义性的句子。
2. 尝试写出PL/0 语言的文法。
整数n
标识符i
表达式e
条件语句
赋值语句
复合语句
函数
程序
...
答:
整数n <整数n>::=int <标识符n>=<无符号整数>|<有符号整数>;
标识符i <标识符i>::= <字符类型> <字母|数字>;
表达式e <表达式> ::= [+ | -] <项> { <加法运算符><项>}
条件语句 <表达式>{语句} ;|<表达式>{句子}
赋值语句 <标识符>=<无符号整数>|<有符号整数>;
<复合语句> ::= BEGIN <语句> {;<语句>} END
函数 <数据类型> <标识符>(形式参数...){句子;...}
<程序> ::= <分程序>.
<分程序> ::= [<常量说明部分>] [<变量说明部分>]
[<过程说明部分>] <语句>
本题参考博文:http://m.dongcoder.com/