第二章 高级语言及其文法
重点:文法的定义与分类,CFG的语法树及二义性、程序设计语言的定义。
难点:程序设计语言的语义。
基本概念:
字母表,乘积,N次幂,正闭包,克林闭包,
句子,空句子,字符在句子中的一个出现(长度:次数),并置(连接),
前缀,真前缀,后缀,真后缀,
公共前缀,最大公共前缀,公共后缀,最大公共后缀,
子串,公共子串,最大公共子串,
语言,句子,乘积,
非终结符号集V ={<赋值语句>,<左部量>,<右部表达式>,<简单变量>,<下标变量>,<运算符>}
终结符号集T ={a,b, c,m[1], m[2], m[3], +, -}
语法规则集P ={<赋值语句> -> <左部量>=<右部表达式>,……}
开始符号S= <赋值语句>
PS:
每个非终结符号对应一个元素集合
每个终结符号对应一个元素
每个语法规则表示产生句子的过程
约定:用大写字母表示语法变量,小写字母表示终结符号
直接推导,推导,派生
直接规约,规约
2.4文法的分类
0型文法:PSL 短语结构文法:包含 S -> ε 的产生式
1型文法:CSL上下文有关文法:产生式左边可以有终结符号
2型文法:CFL上下文无关文法:产生式左边不能有终结符号
3型文法:RL正则文法:A -> w 或 A -> Bw 或 A -> wB
短语:$α, β, γ∈(V∪T)*,S =>(*) γAβ,A =>(*) α,则称α是句型γαβ的相对于变量A的短语(phrase);
直接短语: A =>α
句柄:最左直接短语
用树的观点来解释:
所有叶子自左至右排列起来所形成的符号串。
测试:
T -> T * F | T / F | F
F -> F^P | P
P -> c | id | (E)
1. E -> E + T
-> T + T
-> F + T
-> id + T
-> id + T * F
-> id + F * F
-> id + P * F
-> id + id * F
-> id + id * P
-> id + id * (E)
-> id + id * (E - T)
-> id + id * (T - T)
-> id + id * ( F - T)
-> id + id * (P - T)
-> id + id * (id - T)
-> id + id * (id - F)
-> id + id * (id - P)
-> id + id * (id - id)
id + id * (id - id)
<- P + id * (id - id)
<- F + id * (id - id)
<- T + id * (id - id)
<- E + id * (id - id)
<- E + P * (id - id)
<- E + F * (id - id)
<- E + T * (id - id)<- E + T * (P - id)
<- E + T * (F - id)
<- E + T * (T - id)
<- E + T * (E - id)
<- E + T * (E - P)
<- E + T * (E - F)
<- E + T * (E - T)
<- E + T * (E)
<- E + T * P
<- E + T * F
<- E + T
<- E
3.短语:id, id, id, id, id - id, (id - id), id * (id - id), id + id * (id - id)
直接短语:id, id, id, id
句柄:id