Lex_Yacc 编译器设计示例代码及参考文档
1.LexAndYaccTutorial_20130311_041140.tgz代码包
生成 calc3a 解释执行
calc3b 生成基于栈的机器的汇编程序
calc3g 生成程序的语法树
用法:
# ./calc3a a.src
u = 5
5
120
halt
a.src是个计算阶乘的源代码
n = 1;
p = 1;
read u;
print u;
while (n <= u) {
p = p * n;
n = n + 1;
}
print p;
calc3b 生成基于栈的机器的汇编程序
用法:
# ./calc3b a.src
push 1
pop n
push 1
pop p
read
pop u
push u
print
L000:
push n
push u
cmpLE
jFalse L001
push p
push n
mul
pop p
push n
push 1
add
pop n
jmp L000
L001:
push p
print
halt
2.lexyacc-simple.tgz,一个简单的simple语言的编译器,可以解释执行,也可编译为栈机器的汇编语言。
3.cc-ansi99-parser_20130313_082654.tgz,一个ansi99标准的C语言的编译器,只进行词法和语法分析,不生成目标代码。
4.同时好有配套的2篇文档:LexAndYaccTutorial.pdf,Compiler Construction using Flex and Bison.pdf
供采用Lex Yacc进行编译器设计者参考
1