⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myhead.h

📁 你是不是很想要词法分析的源代码呢?!哈哈
💻 H
字号:
//////////////////////////////////////////////////////////////////////////

#include <string>
using namespace std;

//辅助输入函数////////////////////////////////////////////////////////////////////////
string getch_blank();  //包括空格的字符串输入

//单词编码////////////////////////////////////////////////////////////////////////
const string keywords[60]={"and","array","begin","bool","call","case","char","constant","dim",
                           "do","else","end","false","for","if","input","integer","not","of",
						   "or","output","procedure","program","read","real","repeat","set",
						   "stop","then","to","true","until","var","while","write","标志符",
						   "整数","字符常数","(",")","*","*/","+",",","-",".","..","/","/*",
						   ":",":=",";","<","<=","<>","=",">",">=","[","]"};

//单词链////////////////////////////////////////////////////////////////////////
struct word_chain   //单词链,把测试文件里面的每个元素区分开后,存放在单词链中
{
	string word;   //单词内容
	int attribute;   //属性,即该单词是属于什么单词编码
	int order;   //是标志符,整数或者字符常数的标志出现的次序,否则为0
	word_chain *next;
};

//标志符,整数,字符串链表(以便查看)///////////////////////////////////////////////////////

struct symbol_chain
{
	word_chain *symbol_word;   //存放文中标志符,整数或者字符串常数的指针
	symbol_chain *next;
};


//编译器类定义////////////////////////////////////////////////////////////////////////
class sample
{
public:
	sample();  //包含前期工作
	~sample();   //后期工作
	bool analyze_words_text();  //词法分析函数,通过返回TRUE,否则返回FALSE
	void show_analyze_text();   //词法分析通过之后显示单词的二元式序列
	

protected:
	/*以下是为词法分析函数做准备的一些内部函数*/
	word_chain* add_word(word_chain*head); //往单词链中添加单词,不包括注释
                                                           //同时返回单词链中该单词的指针
    int point_word(string word); // 判断单词在文中出现的位置,返回0代表该标志符在前面没有出现过
                              //否则,返回该标志符在前面出现的位置
    void add_symbol(word_chain*);//往标志符链中添加元素
	string separate_word(string words_line,int&point);  //分离单词函数
	int analyze_word(string word);  // 分析单个单词,返回一个代表分析结果的数 
                         // 0 代表合法的注释,-1 代表非法字符
	                     // -2 代表字符常数缺右边的单引号,-3 代表注释部分缺右边的界符*/
						 // 1~60代表合法并且返回其单词编码

	/*以下是为语法分析函数做准备的一些内部函数*/

private:
	string filename;           //文件名
	word_chain *text;          //单词链,包含程序中除了注释以外的所有单词
	symbol_chain *symbol;         //用于标记文中标志符,整数或者字符串常数的位置
	int symbol_number;        //   用于记录文中标志符,整数或者字符串常数的个数
	int error;           //用于记录程序中错误的个数
	int warning;          //用于记录程序中警告的个数
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -