词法分析程序设计
一、实验目的
设计、编制并调试一个简单语言CP(Compiler Principle)的词法分析程序,加深对词法分析原理的理解。
二、实验内容
- CP语言的词法
(1) 关键词: begin end if then else for while do and or not
注意:所有关键词都是小写的。
(2) 标识符ID,与标准C语言一致,即:以下划线或字母开头的字母数字下划线组成的符号串。
(3)无符号整数NUM:数字串
(4)运算符和分界符: +、-、*、/、>、<、=、:=、>=、<=、<>、++、–、(、)、; 、 #
注意::=表示赋值运算符、#表示注释开始的部分,;表示语句结束,<>表示不等关系
(5) 空白符包括空格、制表符和换行符,用于分割ID、NUM、运算符、分界符和关键词,词法分析阶段要忽略空白符。 - 说明
(1)CP语言是大小写敏感语言;
(2)字母为a-zA-Z,数字为0-9;
(3)学有余力同学可以在上述词法要求基础上进行扩充和改造;
(4)每行代码中从#开始的部分为注释部分(参考python语法) - 设计要求
(1) 给出各类单词符号的分类编码(可以根据自己程序的需要来给各种类别单词编码,给每个词法单位一个编码,也可以给一个类别里所有符号都编同一个编码)。
(2) 词法分析程序应该能发现输入串中的错误
(3) 词法分析作为单独一遍,将词法分析程序输出的二元式序列保存为中间文件形式【也可以在屏幕窗口直接输出】
三、实验要求
- 写出程序框图、设计过程、主要数据结构等。
- 写出程序源代码,并调试通过,输出实验结果。
四、实验代码
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct {
int number; string str[100]; } keywords = {
11,"begin","end","if","then","else","for","while","do","and","or","not" }; //关键词
struct {
int number; string str[100]; } operators = {
13,"+","-","*","/",">","<","=",":=",">=","<=","<>","++","--"}; //运算符
struct {
int number; string str[100]; } boundaries = {
5,"(",")",",",";","#" }; //分界符
struct {
int number; string str[100]; } identifieres = {
0 }; //标识符,以下划线或字母开头的字母数字下划线组成的符号串。
struct {
int number; string str[100]; } Unsigned_integer = {
0 }; //无符号整数NUM:数字串
string changinStr(vector<char> a) {
string temp(a.size(), ' ');
for (int i = 0; i < a.size(); i++