编译原理第3章文法和语言
- 格式:doc
- 大小:118.00 KB
- 文档页数:84
编译原理的⽂法和语⾔总结与梳理梳理⽂法和语⾔的内容,理解与总结。
我们都知道,⼀种语⾔必定他的⽂法去描述,它的完整定义包括语法和语义两个⽅⾯。
语⾔和语法是指⼀组规则,⽤它可以形成和产⽣⼀个合适的程序。
⽬前⼴泛使⽤的是上下⽂⽆关⽂法,也就是⽤上下⽂⽆关⽂法作为程序设计的描述⼯具,⽐如⽤A:=B+C表⽰是⼀个合法的赋值语句,则A:=B+就不是合法的赋值语句。
什么是⽂法?⽂法相当于语⾔学(⼈类语⾔)中的语义分析,即分析⼀个句所表⽰的含义。
它是产⽣中间代码或⽬标代码的依据。
⽤EBNF(EBNF是⼀种称为扩展巴克斯范式的形式描述)表⽰就是:<句⼦> ::= <主语><谓语> <主语> ::= <代词>< 名词> <代词>::= 我 | 你 | 他 <名词>::= 王明 | ⼤学⽣ | ⼯⼈ | 英语 <谓语> ::= <动词><直接宾语> <动词> ::= 是 | 学习 <直接宾语> ::=<代词> |<名词>(1)⽂法的形式化定义: G=(V T , V N , P , S) V T:终结符集合,终结符是⽂法所定义的语⾔的基本符号,有时也称为token。
V N:⾮终结符集合,⾮终结符是⽤来表⽰语法成分的符号,有时也称为"语法变量",可以推出其它的语法成分P:产⽣式集合S:开始符号(2)符号串运算: 符号串的连接:εx=xε=x; 集合的乘积:AB={xy|x∈A,y∈B};{ε}A=A{ε}=A; 符号串的幂运算:x=abc,x^2=abcabc; 集合的幂运算正闭包A+与闭包A*:A*={ε}∪A+(3)⽂法分类:(4)语⾔的定义与运算 语⾔:在某⼀确定字母表上的特定符号串的集合。
空集ε,集合{ ε }也是符合此定义的语⾔。
第3章文法和语言第1题文法G=({A,B,S},{a,b,c},P,S)其中P为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD....=>NDDDD...D=>D......D或者:允许0开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=>aaa..ab...bbbL(G[Z])={anbn|n>=1}第5题写一文法,使其语言是偶正整数的集合。
要求:(1)允许0打头;(2)不允许0打头。
答案:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6题已知文法G:<表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i答案:(5)<表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)(6)<表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i<表达式><表达式>+<项><因子><表达式><表达式>+<项><因子>i<项><因子>i<项><因子>i()<表达式><表达式>+<项><项>*<因子><因子>i<项><因子>ii第7题证明下述文法G[〈表达式〉]是二义的。