编译原理实验
Riicarus大约 2 分钟计算机科学编译原理编译原理实验
编译原理实验
词法分析
语法分析
语法
⎩⎨⎧S→S′S′→beginDT;ETendDT→D∣DT;DD→VD∣FDVD→integerVV→IFD→integerfunctionI(A);FBA→VFB→beginDT;ETendET→E∣ET;EE→ER∣EW∣EA∣ECER→read(V)EW→write(V)EA→V:=AEAE→AE−IT∣ITIT→IT∗FA∣FAFA→V∣C∣FEFE→I(V)EC→ifCEthenEelseECE→AESRAESR→<∣<=∣>∣>=∣=∣<>
S: 程序 S′: 分程序 DT: 说明语句表 ET: 执行语句表 D: 说明语句 VD: 变量说明 FD: 函数说明 V: 变量 I: 标识符 A: 参数 FB: 函数体 E: 执行语句 ER: 读语句 EW: 写语句 EA: 赋值语句 EC: 条件语句 AE: 算数表达式 IT: 项 FA: 因子 FE: 函数调用 CE: 条件表达式 SR: 关系运算符
左递归消除
有左递归的语句:
⎩⎨⎧DT→D∣DT;DET→E∣ET;EIT→IT∗FA∣FAAE→AE−IT∣IT
消除左递归:
DT→DT;D∣D==>{DT→DDT′DT′→;DDT′∣ϵ
ET→ET;E∣E==>{ET→EET′ET′→;EET′∣ϵ
I→I∗FA∣FA==>{IT→FAIT′IT′→∗FAIT′∣ϵ
AE→AE−IT∣IT==>{AE→ITAE′AE′→−ITAE′∣ϵ
消除后结果
⎩⎨⎧S→S′S′→beginDT;ETendDT→DDT′DT′→;DDT′∣ϵD→VD∣FDVD→integerVV→IFD→integerfunctionI(A);FBA→VFB→beginDT;ETendET→EET′ET′→;EET′∣ϵE→ER∣EW∣EA∣ECER→read(V)EW→write(V)EA→V:=AEAE→ITAE′AE′→−ITAE′∣ϵIT→FAIT′IT′→∗FAIT′∣ϵFA→V∣C∣FEFE→I(AE)EC→ifCEthenEelseECE→AESRAESR→<∣<=∣>∣>=∣=∣<>