最近对解释型程序(类似python或者是linux里的bc计算器)非常感兴趣,就开始学习一下编译原理。今天自己实现了TINY语言的词法扫描程序。大部分参考《编译原理及实践》一书。但是我做了一些小小的改进。
先说一下TINY语言:
1、注释:放在一对大括号内。书上的注释不能嵌套,我做了一点改进,允许嵌套。
2、关键字:read write if end repeat until else
3、类型:只支持整型和布尔型。
4、计算:+ - * / ( ) < = :=,其中:=为赋值运算,=为判断。没有〈和<= >=
一个示例的TINY语言程序:
test.tine: (选自《编译原理及实践》)
{ Sample program
in TINY language -
computes factorial
}
read x; { input an integer }
if 0 < x then { don't compute if x <= 0 }
fact := 1;
repeat
fact := fact * x;
x := x - 1;
until x = 0;
write fact { output factorial of x }
end
在globals.h中,涉及到一些类型的声明:
#ifndef GLOBALS_H
#define GLOBALS_H
#include <stdio.h>
typede