文法的二义性:
一个句型可能对应多个语法树,一个句型可能对应多个最左/最右推导。
如果一个文法中的某个句子可以对应两个不同的语法树,则称这个文法是二义的。
两个不同的文法可能是一样的语言。
如果一种语言的所有文法都是二义的,则称此语言先天二义。
判定一个文法是否是二义的是递归不可解的。
2. 尝试写出PL/0 语言的文法。
整数n n :: = 1 | 2 | ..... | 9 | 0
标识符i i :: = <字母> | {<字母> | <数字 >}
表达式e ::=[+|-]<项>{<加减运算符><项>}
条件语句 ::=if<条件>then<语句>
赋值语句 ::=<id>:=<表达式>
复合语句 ::=begin<语句>{;<语句>}end
函数 ::= <类型说明><函数名><复合语句>
程序 ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>