编译原理期末复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{type.dtype = real}
请按语法制导的定义,将后缀表达式翻译 成中缀表达式。注意,不允许出现冗余括 号,后续表达式的文法如下:
E->EE+ E->EE* E->id
语法制导定义 产生式
语义规则
S->E E->E1E2+ E->E1E2*
E一>id
print E.code
E.code=E1.code||'+'||E2.code; E.op='+'
07级编译原理期末复习
一、概念
编译器;词法分析器;语法分析器;LEX;YACC; 代码生成器;编译系 统;
单词(token);属性(attribute);符号表; 上下文无关文法(CFG);语言;字符串;正则表达式;前缀;后缀;子
串; 语法产生式;终结符;非终结符; 重写规则; 属性文法;继承属性;综合属性;语义规则;语义动作; 自顶向下分析(top-down);自底向上分析(bottom-up); DFA;NFA;LL;算符优先算法;SLR;LR;LALR; 状态转换表;语法分析表; 回溯;消除左递规;提取左因式;右递规; 最左推导;最右推导;规约;句型;句子(sentence);句柄(handle);
SLR
对于下列的文法,试分别构造它们的LR(0)项目集规范族及识别全部活前缀的 DFA。 (1)S→aSb
S→aSc S→ab
(2) S→cA S→ccB
A→cA A→a
B→ccB B→b
(3) S→aSSb S→aSSS
S→c
(4)S→A A→Ab
A→a
SLR
下列文法是否为SLR(1)文法?若是,构造相应的SLR(1)分析表,若不是,则阐明其理由。 (1) S→Sab
S→bR R→S
R→a
(2)S→aSAB S→BA
A→aA A→B来自百度文库
B→b
(3)S→aSb S→bSa
S→ab
(4)S→aA S→bB
A→cAd A→ε
B→cBdd B→ε
LR/LALR
对于文法G[S]: S→A
A→BA A→ε
B→aB B→b (1) 构造LR(1)分析表; (2) 给出用LR(1)分析表对输入符号串abab 的分析过程。
三、算法
消除左递归和提取左公共因子; Thompson构造法; 子集构造法; 正则表达式直接构造DFA; 构造FIRST集合; 构造FOLLOW集合; 构造LL(1)语法分析表; 构造LR(0)项目集; 构造SLR(1)语法分析表; 构造LR(1)项目集; 构造LR(1)/LALR(1)语法分析表; 构造属性文法(左递规,右递规,运算表达式,类型声明); 构造语法制导翻译的语义动(包括自顶向下和自底向上); 三地址表示的代码生成; 汇编表示的代码生成;
RE/LL
构造识别如下正规语言的DFA: 01(0|1) *1
对于如下的文法,topdown语法分析。 P→begin d; X end X→d;X X→sY Y→;sY Y→ε
LL
验证下列文法是否为LL(1)文法。 (1)S→ABS→CDa A→abA→c B→dEC→eC C→εD→fD D→fE→dE E→ε (2) S→aABbCDS→ε A→ASdA→ε B→SAcB→eC B→εC→Sf C→CgC→ε D→aBDD→ε
IF E1.op='+' AND E2.op='+' THEN E.code="("||E1.code||')'||'*'||'('||E2.code||')'; ELSE IF E1.op='+'THEN E.code="("||E1.code||')'||'*'||E2.code; ELSE IF E2.op='+'THEN E.code=E1.code||'*'||'('||E2.code||')'; ELSE E.code=E1.code||'*'||E2.code||;
E.code:=id.lexeme;
假设变量的说明是由下列文法生成的: Di L L,i L | :T Tinteger | real 1)建立一个语法制导定义,把每一个标志
将下列中缀式改写为逆波兰式。 (1) -A*(B+C)↑(D-E) (2) ((a*d+c)/d+e)*f+g (3) a+x≤4∨(C∧d*3) (4) a∨b∧c+d*e↑f
RECURSIVE
消除下列文法的左递归性。 (1)S→SA
S→A A→SB A→B A→(S) A→( ) B→[S] B→[ ] (2) S→AS S→b A→SA A→a (3) S→(T) S→a S→ε T→S T→T,S
语法树; 移进-规约冲突;规约-规约冲突; 栈帧;栈指针;活动记录/帧;存储分配策略;函数参数传递; LR(0)项目集;LR(1)项目集;同心集; 中缀表示;后缀表示;前缀表示;三地址表示;RTL;
二、几个重要的关系
正则表达式-语言; 语法-语言; 正则表达式-语法; LL-SLR-LR-LALR; 中缀表示-前、后缀表示; 最右推导-句柄; 最左、最右推导-语法分析;
var-list→id type→integer type→real
语义规则
{var-list.dtype=type.dtype} {var-list2.in=var-list1.dtype} {{vvaarr--lliisstt22..ddttyyppee==vvaarr--lliisstt21..idntype iidd..idnt=ypvaer=-vlisatr1-l.idstty1p.det}ype} {id.dtype = var-list.dtype} {id.in = var-list.dtype} {type.dtype = integer}
AR
下面文法给出是Pascal说明的文法,写出变量 类型的一个属性文法。 decl ->var-list: type var-list -> var-list, id | id type ->int | float
文法规则 decl→var-list: type var-list1→var-list2, id
请按语法制导的定义,将后缀表达式翻译 成中缀表达式。注意,不允许出现冗余括 号,后续表达式的文法如下:
E->EE+ E->EE* E->id
语法制导定义 产生式
语义规则
S->E E->E1E2+ E->E1E2*
E一>id
print E.code
E.code=E1.code||'+'||E2.code; E.op='+'
07级编译原理期末复习
一、概念
编译器;词法分析器;语法分析器;LEX;YACC; 代码生成器;编译系 统;
单词(token);属性(attribute);符号表; 上下文无关文法(CFG);语言;字符串;正则表达式;前缀;后缀;子
串; 语法产生式;终结符;非终结符; 重写规则; 属性文法;继承属性;综合属性;语义规则;语义动作; 自顶向下分析(top-down);自底向上分析(bottom-up); DFA;NFA;LL;算符优先算法;SLR;LR;LALR; 状态转换表;语法分析表; 回溯;消除左递规;提取左因式;右递规; 最左推导;最右推导;规约;句型;句子(sentence);句柄(handle);
SLR
对于下列的文法,试分别构造它们的LR(0)项目集规范族及识别全部活前缀的 DFA。 (1)S→aSb
S→aSc S→ab
(2) S→cA S→ccB
A→cA A→a
B→ccB B→b
(3) S→aSSb S→aSSS
S→c
(4)S→A A→Ab
A→a
SLR
下列文法是否为SLR(1)文法?若是,构造相应的SLR(1)分析表,若不是,则阐明其理由。 (1) S→Sab
S→bR R→S
R→a
(2)S→aSAB S→BA
A→aA A→B来自百度文库
B→b
(3)S→aSb S→bSa
S→ab
(4)S→aA S→bB
A→cAd A→ε
B→cBdd B→ε
LR/LALR
对于文法G[S]: S→A
A→BA A→ε
B→aB B→b (1) 构造LR(1)分析表; (2) 给出用LR(1)分析表对输入符号串abab 的分析过程。
三、算法
消除左递归和提取左公共因子; Thompson构造法; 子集构造法; 正则表达式直接构造DFA; 构造FIRST集合; 构造FOLLOW集合; 构造LL(1)语法分析表; 构造LR(0)项目集; 构造SLR(1)语法分析表; 构造LR(1)项目集; 构造LR(1)/LALR(1)语法分析表; 构造属性文法(左递规,右递规,运算表达式,类型声明); 构造语法制导翻译的语义动(包括自顶向下和自底向上); 三地址表示的代码生成; 汇编表示的代码生成;
RE/LL
构造识别如下正规语言的DFA: 01(0|1) *1
对于如下的文法,topdown语法分析。 P→begin d; X end X→d;X X→sY Y→;sY Y→ε
LL
验证下列文法是否为LL(1)文法。 (1)S→ABS→CDa A→abA→c B→dEC→eC C→εD→fD D→fE→dE E→ε (2) S→aABbCDS→ε A→ASdA→ε B→SAcB→eC B→εC→Sf C→CgC→ε D→aBDD→ε
IF E1.op='+' AND E2.op='+' THEN E.code="("||E1.code||')'||'*'||'('||E2.code||')'; ELSE IF E1.op='+'THEN E.code="("||E1.code||')'||'*'||E2.code; ELSE IF E2.op='+'THEN E.code=E1.code||'*'||'('||E2.code||')'; ELSE E.code=E1.code||'*'||E2.code||;
E.code:=id.lexeme;
假设变量的说明是由下列文法生成的: Di L L,i L | :T Tinteger | real 1)建立一个语法制导定义,把每一个标志
将下列中缀式改写为逆波兰式。 (1) -A*(B+C)↑(D-E) (2) ((a*d+c)/d+e)*f+g (3) a+x≤4∨(C∧d*3) (4) a∨b∧c+d*e↑f
RECURSIVE
消除下列文法的左递归性。 (1)S→SA
S→A A→SB A→B A→(S) A→( ) B→[S] B→[ ] (2) S→AS S→b A→SA A→a (3) S→(T) S→a S→ε T→S T→T,S
语法树; 移进-规约冲突;规约-规约冲突; 栈帧;栈指针;活动记录/帧;存储分配策略;函数参数传递; LR(0)项目集;LR(1)项目集;同心集; 中缀表示;后缀表示;前缀表示;三地址表示;RTL;
二、几个重要的关系
正则表达式-语言; 语法-语言; 正则表达式-语法; LL-SLR-LR-LALR; 中缀表示-前、后缀表示; 最右推导-句柄; 最左、最右推导-语法分析;
var-list→id type→integer type→real
语义规则
{var-list.dtype=type.dtype} {var-list2.in=var-list1.dtype} {{vvaarr--lliisstt22..ddttyyppee==vvaarr--lliisstt21..idntype iidd..idnt=ypvaer=-vlisatr1-l.idstty1p.det}ype} {id.dtype = var-list.dtype} {id.in = var-list.dtype} {type.dtype = integer}
AR
下面文法给出是Pascal说明的文法,写出变量 类型的一个属性文法。 decl ->var-list: type var-list -> var-list, id | id type ->int | float
文法规则 decl→var-list: type var-list1→var-list2, id