标签:过程调用 相同 文法 ash 形式语言 mic spl 说明 连接
1. 梳理第二章的内容,写一篇理解与总结。
一、 对程序设计语言的描述从语法、语义和语用三个因素考虑:
形式语言理论是编译的理论基础。
二、 字母表:元素的非空有穷集合;
三、 符号串运算:
四、 形式语言:字母表上按照某种规则构成的所有符号串的集合,其不考虑语义。描述形式语言的方式有两种:
五、 文法:G=(Vn,Vt,P,S)
A→β
i. 一组规则定义了一个语言的语法结构;
ii. 规则中出现的符号分为终结符号和非终结符号
六、 推导:推导的依据是规则
七、 句型、句子和语言:
八、 递归:
i. 规则左递归:A->A…;
ii. 规则右递归:A->…A;
iii. 规则递归:A->…A…;
九、 短语、直接短语和句柄:都是针对某一句型的
十、 文法的二义性:
定义:如果一个文法存在某个句子对应两棵不同的语法树|包含两个或两个以上的最右(最左)推导(规约),则该文法是二义性的,可以利用文法之间的等价性来消除二义性。
十一、 文法的分类:
i. 右线性文法:只能对推出式的右边展开,A->αB|α,A,B∈Vn,α∈Vt*。
ii. 左线性文法:只能对推出式的左边展开,A->Bα|α,A,B∈Vn,α∈Vt*。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
PL/0语言文法的BNF表示:
〈程序〉→〈分程序〉.
〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉
<常量说明部分> → 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
如果一个文法存在某个句子对应两棵不同的语法树|包含两个或两个以上的最右(最左)推导(规约),则该文法是二义性的,可以利用文法之间的等价性来消除二义性。
标签:过程调用 相同 文法 ash 形式语言 mic spl 说明 连接
原文地址:https://www.cnblogs.com/zhif97/p/11583562.html