课程设计基于C语言子集的词法分析器;

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:55:52
1)目的
通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。
2)要求
⑴ 掌握从源程序文件中读取有效字符的方法。
⑵ 掌握词法分析的实现方法。
⑶ 上机调试编出的词法分析程序。
(4) 最多人一组,共同开发完成;每个小组确定组长一名。
二、实践
主程序设计

1.程序功能分割
(1)标识符的识别
(2)关键字的识别
(3)常数的识别:整数,实数,指数形式表示的数
(4)界符的识别
(5)算符的识别(注意区分:单目,双目的区分+,++,+=)
(6)关系比较符的识别(注意区分:单目,双目>,>=)
(7)字符常量的识别
(8)字符串常量的识别
(9)错误处理
等等
请注意每个成员编写至少四个独立功能的函数。
2.源代码运行结果是:
给出经过词法分析器之后转换的单词符号序列和其属性值
例如:
假设:while种别为01,(种别为11,标识符种别为20,>=种别为12,)种别为13,--种别为14,;种别为30
代码段
while ( i >= j ) i -- ;
经过词法分析器之后转换的单词符号序列
( 01, — )
( 11, — )
( 20 ,指向i的符号表项的指针 )
( 12 , — )
( 20 ,指向j的符号表项的指针 )
( 13 , — )
( 20 ,指向i的符号表项的指针 )
( 14 , — )
( 30 , — )

注意: 请根据《C程序设计》的附录将C语言中的关键字,运算符等自己设定种别。在实验报告中给出关键字,运算符种别表

C语言词法分析器
/*////////////////////
题目:C语言词法分析器
作者:liuanggh
时间:.9.20
*/////////////////////
#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;

FILE *f; //定义一个文件变量
static int line = 1; //表示光标所在的行数
struct ID{ char *name; int count;}id[100];//用于存放ID号码
static int I = 0; //用于记录ID存放的数量
int Number[100]; //用于存放数字
static int P = 0; //用于记录存放数字的个数
int error[100] = {0}; //用于记录错误所在的行数
static int K = 0; //记录错误次数
void Error(); //记录错误
void loginID(char *); //注册ID号
void loginNumber(int &); //记录数字
void noteLine(char &); //记录光标所在的行数
void print(); //输出分析结果
int same(char *chr); //判断单词是否已经存在

void Error()
{ error[K++] = line; }

void loginID(char *chr) //注册ID号
{
int k = 0;
int h = 0;
for