最近在看C专家编程,有一个编程挑战:编写一个程序,把C语言的声明翻译成通俗语言。很像编译原理中的词法分析部分与语法制导的部分。上个学期虽然自己也敲了编译器的各个环节但是自己写的C语言和书上的相比真的略显稚嫩。书上提供的代码真的很完美的感觉,记录在这里以后也方便品读。。。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#define MAXTOKENS 100
#define MAXTOKENLEN 64
//IDENTIFIER标识符,QUALIFIER限定符,TYPE类型
enum type_tag {
IDENTIFIER, QUALIFIER, TYPE};
struct token
{
char type;//类型
char string[MAXTOKENLEN];//存储读取的字符串
};
int top = -1;
struct token stack[MAXTOKENS];//保存第一个标记之前的所有标记
struct token this;//保存刚读入的标记
#define pop stack[top --]
#define push(s) stack[++top] = s
//字符串分类
enum type_tag classify_string(void)
{
char *s = this.string;
if(!strcmp(s, "const"))
{
strcpy(s, "read-only");
return QUALIFIER;
}
if(!strcmp(s, "volatile")) return QUALIFIER;
if(!strcmp(s, "void")) return TYPE