编译原理 | 实验一 | 设计词法分析器

本文详细介绍了如何设计一个C语言的词法分析器,包括问题分析、代码实现和技巧总结。重点在于将源代码字符串按元素拆分并分类输出,涉及文件IO和字符串处理。在代码实现部分,提到了头文件、判别函数的使用,以及文件输入和分词函数的编写。最后,作者总结了文件读取、字符串赋值的技巧,并指出了当前实现的不足,如未充分考虑意外字符。
摘要由CSDN通过智能技术生成

目录

 

一.题目

二.问题分析

三.代码实现 

四.技巧总结

五.不足


一.题目

如源程序为C语言,输入如下一段:

main()
{
   int a=-5, b=4, j;
   if(a>=b)
     j=a-b;
   else
     j=b-a;
}

输出以下二元序列:

其中,序号分别意味着:

 

二.问题分析

分两步走:

1.将语句分成若干单独的元素.      这个问题是最关键的.

2.将每个元素分门别类,输出.       

 

分词子问题:

在遍历字符串( 一行代码 )的过程中,遇到空格、换行符、tab、限界符、单独的运算符, 分词

遇到字母或数字, 不分词.

为了实现这一效果,设立

一个 char 类型的变量,时刻指向readline字符串中的下一个字符

同时建立各个判别函数,如IsBlock()   IsSymbol() 等.

 

对代码文件的每一行,都有:

三.代码实现 

 

1.头文件 & 类的声明

using namespace std;
#include<iostream>
#include<fstream>
#include<string>
#include<vector>

class LexicalAnalysis
{
public:
	LexicalAnalysis();    //构造&析构是空函数
	~LexicalAnalysis();

	void GetFilename(ifstream& filename);			//打开文件
	void InputFile(ifstream& file);							//输入文件,,分析经Segment处理的curtoken向量
	void Segment(string str);								//将字符串(一行)分为独立的词,不涉及词性分析
	

	//分词,将字符串分为若干段 ( 不包括空格符 ) ,存入curtoken[]
	bool IsBlock(string);					//换行,空格,制表符.      应当分词
	bool IsSymbol(string);			//是运算符,分隔符等.    应当分词

	//词性分析
	bool IsKey(string);				//关键字
	bool IsConsts(string);			//常数
	bool IsOperator(string);		//操作数
	bool IsBorder(string);			//限界符

	
private:
	
	vector <string> token;		//暂存一个个字符,用于分词
	string temp;						//暂存当前token的全部字符,作为curtoken的一个元素
	vector<string>curtoken;	//暂存一个个分好的词,用于之后的词性分析

};

2.各种判断函数

一通分类判断完以后,剩下的只可能是变量名:由字母

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值