编译原理上机实验报告[1]

  • 格式:docx
  • 大小:29.01 KB
  • 文档页数:16

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译技术上机实验题目

实验一

一、题目

编制C语言子集的词法分析程序

二、目的

通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

三、要求

1.根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到),如课本表

2.1;在上机前一定要制出相应的表。

2.程序功能

输入:字符串。

输出:二元式(种别编码,单词自身)构成的序列。

举例:

输入:a=$;#

输出:(6,a)

(12,=)

FOUND ERROR

(13,;)

#include

#include

using namespace std;

string key[6] = {"begin", "if", "then", "while", "do", "end"}; //关键字

bool isKey( string str, int &syn) //判断是否为关键字,若是传回相应关键码的种别名

{

int i;

for(i=0; i<6; i++)

{

if(str == key)

{

syn = i + 1;

return true;

}

}

return false;

}

bool isLetter(char c) //是否为字母

{

if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))

return true;

else

}

bool isDigit(char c) //是否为数字

{

if(c >= '0' && c <= '9')

return true;

else

return false;

}

void analyse(FILE *fileP)

{

int n;

char c;

string str = "";

while((c = fgetc(fileP)) != EOF)

{

if(c == ' ' || c == '\n' || c == '\t')

continue;

else if(isDigit(c)) //数字

{

while(isDigit(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

cout << "(11, " << str << ")" << endl;

str = "";

}

else if(isLetter(c)) //字母开头的

{

while(isDigit(c) || isLetter(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

if(isKey(str, n))

cout << "(" << n << ", " << str << ")" << endl; //关键码

else

cout << "(10, " << "\'"<< str << "\'" << ")" << endl; //标志符str = "";

}

{

switch(c)

{

case '+':

cout << "(13, +)" << endl;

break;

case '-':

cout << "(14, -)" << endl;

break;

case '*':

cout << "(15, *)" << endl;

break;

case '/':

cout << "(16, /)" << endl;

break;

case ':':

{

if(c=fgetc(fileP) == '=')

cout << "(18, :=)" << endl;

else

{

cout << "(17, 编译技术上机实验题目

实验一

一、题目

编制C语言子集的词法分析程序

二、目的

通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

三、要求

1.根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到),如课本表

2.1;在上机前一定要制出相应的表。

2.程序功能

输入:字符串。

输出:二元式(种别编码,单词自身)构成的序列。

举例:

输入:a=$;#

输出:(6,a)

(12,=)

FOUND ERROR

(13,;)

#include

#include