主题:哪位大侠帮忙做个小编译器啊!
1.简单高级语言文法:
<程序>→[<常量说明>][<变量说明>]<语句>
<常量说明>→Const <常量定义>{,<常量定义>};
<常量定义>→<标识符>=<无符号整数>
<无符号整数>→<数字>{<数字>}
<字母>→a|b|c| … |z
<数字>→0|1|2| … |9
<标识符>→<字母>{<字母>|<数字>}
<变量说明>→Var <标识符>{,<标识符>};
<语句>→<赋值语句>|<条件语句>|<当循环语句>|<复合语句>|ε
<赋值语句>→<标识符>=<表达式>
<表达式>→<项>{<加法运算符><项>}
<项>→<因子>{<乘法运算符><因子>}
<因子>→<标识符>|<无符号整数>|‘(’<表达式>‘)’
<加法运算符>→+|-
<乘法运算符>→* |/
<条件语句>→if <条件> then <语句>| if <条件> then <语句> else <语句>
<条件>→<表达式><关系运算符><表达式>
<关系运算符>→==|<=|<|>|>=|<>
<当循环语句>→while <条件> do <语句>
<复合语句>→begin <语句>{;<语句>} end
注:
<> — 非终结符号
[] — 可选项
{} — *
| — 或
2.分析
(1)单词符号结构
无符号整数:NUM =( 0 | 1 | 2 | … | 9 )+
标识符:ID =( a | b | c | … | z )( a | b | c | … | z | 0 | 1 | 2 | … | 9)*
(2)语法规则
P → C V S | C S | V S | S
/* P-程序 C-常量说明 V-变量说明 S-语句
C → Const D ;
/* D-常量定义
D → id = num , D | id = num
V → Var ID ;
ID → id , ID | id
S → A | I | W | B |ε
/* A-赋值语句 I-条件语句 W-当循环语句 B-复合语句
A → id = E
/* E-表达式
E → T | E P T
/* T-项 P-加法运算符
T → F | T M F
/* F-因子 M-乘法运算符
F → id | num |(E)
P → + | -
M → * | /
I → if X then S | if X then S else S
/* X-条件
X → E O E
/* O-关系运算符
O → == | <= | < | > | >= | <>
W → While X do S
B → begin Y end
Y → S ; Y | S
3.实验要求:
1、编写词法分析程序 (源程序输入)
2、编写语法分析程序
3、编写语义分析程序 (三地址代码输出)
4、集成各子程序为一小型编译器
<程序>→[<常量说明>][<变量说明>]<语句>
<常量说明>→Const <常量定义>{,<常量定义>};
<常量定义>→<标识符>=<无符号整数>
<无符号整数>→<数字>{<数字>}
<字母>→a|b|c| … |z
<数字>→0|1|2| … |9
<标识符>→<字母>{<字母>|<数字>}
<变量说明>→Var <标识符>{,<标识符>};
<语句>→<赋值语句>|<条件语句>|<当循环语句>|<复合语句>|ε
<赋值语句>→<标识符>=<表达式>
<表达式>→<项>{<加法运算符><项>}
<项>→<因子>{<乘法运算符><因子>}
<因子>→<标识符>|<无符号整数>|‘(’<表达式>‘)’
<加法运算符>→+|-
<乘法运算符>→* |/
<条件语句>→if <条件> then <语句>| if <条件> then <语句> else <语句>
<条件>→<表达式><关系运算符><表达式>
<关系运算符>→==|<=|<|>|>=|<>
<当循环语句>→while <条件> do <语句>
<复合语句>→begin <语句>{;<语句>} end
注:
<> — 非终结符号
[] — 可选项
{} — *
| — 或
2.分析
(1)单词符号结构
无符号整数:NUM =( 0 | 1 | 2 | … | 9 )+
标识符:ID =( a | b | c | … | z )( a | b | c | … | z | 0 | 1 | 2 | … | 9)*
(2)语法规则
P → C V S | C S | V S | S
/* P-程序 C-常量说明 V-变量说明 S-语句
C → Const D ;
/* D-常量定义
D → id = num , D | id = num
V → Var ID ;
ID → id , ID | id
S → A | I | W | B |ε
/* A-赋值语句 I-条件语句 W-当循环语句 B-复合语句
A → id = E
/* E-表达式
E → T | E P T
/* T-项 P-加法运算符
T → F | T M F
/* F-因子 M-乘法运算符
F → id | num |(E)
P → + | -
M → * | /
I → if X then S | if X then S else S
/* X-条件
X → E O E
/* O-关系运算符
O → == | <= | < | > | >= | <>
W → While X do S
B → begin Y end
Y → S ; Y | S
3.实验要求:
1、编写词法分析程序 (源程序输入)
2、编写语法分析程序
3、编写语义分析程序 (三地址代码输出)
4、集成各子程序为一小型编译器