第一部分:词法分析
我们从一个简单的词法分析器开始我们的编译器编写。词法分析器的工作是依次扫视字符串形式源程序中的各个字符,逐个识别出其中的单词,并将其转换为内部编码形式的单词符号串作确为输出。
从简单的单词开始:
五个基本的数学运算符(*,/,+,-,% )和十进制整数(0…9)
扫描到的每个单词都将存储在此结构中:
// 单词结构体
struct token
{
int token;
int intvalue;
};
其中 token 字段可以为以下值之一:
enum
{
T_EOF, T_ADD, T_SUB, T_MUL, T_DIV, T_MOD, T_INT
};
它们分别代表:"EOF","+", "-", "*", "/", "%", "int"
当 token 为 T_INT 时,即单词为整数时,intvalue=整数值
核心代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
// 单词类型
enum
{
T_EOF, T_ADD, T_SUB, T_MUL, T_DIV, T_MOD, T_INT
};
// 单词结构体
struct token
{
int token;
int intvalue;
};
int scan(struct token *t);
// data.h
int Line; //当前读入行数
int Putbackchr;
FILE *Infile;
// 返回字符 c 在字符串 s 中的位置,如果没有找到 c,则返回 -1
int get_chrpos(char *s, int c)
{
char *p;
p = strchr

本文介绍了一个简单词法分析器的设计与实现过程,该分析器能够处理基本的数学运算符和十进制整数,通过扫描输入文件识别出单词符号,并将其转换为内部编码形式。
最低0.47元/天 解锁文章
4043

被折叠的 条评论
为什么被折叠?



