编译原理实验报告
实验一 词法分析设计
一、实验目的
通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验内容
我是一只猫作文用 VC++/VB/JAVA 语言实现对 C 语言子集的源程序进行词法分析。通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示 ;同时进行标识符登记符号表的管理。
三、词法分析实验设计思想及算法
int fenxi(CString,CString&)
分析程序的入口函数
void myprint(CString&);
输出分析结果
void error(CString);
交流沟通
错误处理函数
bool isConstructChar(char,int);
判断是否是构成标识符的字符
void doNumber(CString);
处理数字输入
void石油产地 doChar(CString);
处理字符输入
void doVal(CString);
处理标识符输入
运行结果
for(i==10)
{
i=i+1;
a=3b;
a=1.24.23.23;
}
源代码
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
using namespace std;
struct node
{
int num;
int type;
CString word;
箭的成语};
struct point
{
int lin;
int row;
风景句子
};
struct result //分析结果类型
{
int type; //符号类型
int num; //符号编号
point p; //出错位置
};
node keyWord[100];
node character[100];
vector<result> nUNIT;
vector<node> Val;
vector<node> Num;
vector<node> Err;
入乡随俗
int line=0; //标示行
int row=0; //标示列
void myprint(CString &output);
void error(CString inCString);
bool isConstructChar(char c,int type);
void doSpliter(CString inCString);
void doNumber(CString inCString);
void doChar(CString inCString);
void doVal(CString inCString);
int fenxi(CString file,CString &output)
{
//构造关键字表
keyWord[0].num=0;
keyWord[0].word="do";
keyWord[0].type=1;
keyWord[1].num=1;
keyWord[1].word="end";
keyWord[1].type=1;
keyWord[2].num=2;
keyWord[2].word="for";
keyWord[2].type=1;
keyWord[3].num=3;
keyWord[3].word="if";
keyWord[3].type=1;
keyWord[4].num=4;
keyWord[4].word="printf";技嘉b150
keyWord[4].type=1;
keyWord[5].num=5;
keyWord[5].word="scanf";
keyWord[5].type=1;
作开头的成语
keyWord[6].num=6;
keyWord[6].word="then";
keyWord[6].type=1;
keyWord[7].num=7;
keyWord[7].word="while";