资源简介

编译原理实验,实现了一个词法分析器生成Token序列。中间代码、四元式生成。含有实验报告。

资源截图

代码片段和文件信息

#include
#include
#include 
#include 
#include 

using namespace std;

void printMenu();//打印菜单这个函数的声明

/******************************************实验一所用函数*********************************************************/
char keywords[30][12]={“program““begin““end““var““while““do““repeat“
“until““for““to““if““then““else““;“ “:“ “(“ “)“ ““
 “:=“ “+“ “-“ “*“ “/“ “>“ “>=“ “==“ “<“ “<=“};
int num_key=28;
int aut[11][8]={ 0 0 0 0 0 0 0 0
         0 2 0 0 0 8 915
             0 2 3 511 0 011
             0 4 0 0 0 0 0 0
             0 4 0 511 0 011
             0 7 0 0 6 0 0 0
             0 7 0 0 0 0 0 0
             0 7 0 011 0 011
             0 8 0 0 0 8 012
             0 0 0 0 0 01014
             0 0 0 0 0 0 013};
char ID[50][12];
int C[20];
int num_ID=0num_C=0;

struct token
{ int code;
  int value;
};                                    //Token结构
struct token tok[100];                    //Token数组
int i_token=0num_token=0;              //Token计数器和Token个数
char strTOKEN[15];                    //当前单词
int i_str;                              //当前单词指针
int npmet;                           //尾数值,指数值,小数位数,指数符号,类型
double num;                           //常数值
char w[50];                            //源程序缓冲区
int i;                                  //源程序缓冲区指针当前字符为w[i]

struct map                             //当前字符到状态转换矩阵列标记的映射
{
char str[50];
int col;
};
struct map col1[4]={{“0123456789“1}{“.“2}{“Ee“3}{“+-“4}};    //数字
struct map col2[2]={{“abcdefghijklmnopqrstuvwxyz“5}{“0123456789“1}}; //关键字或标识符
struct map col3[1]={{“;:()+-*/=><“6}};                    //界符
struct map *ptr;
int num_map;

void act(int s);
int find(int schar ch);
int InsertConst(double num);
int Reserve(char *str);
int InsertID(char *str);

//实验一中函数的实现
void act(int s)
{
int code;
switch (s)
{
case 1:n=0;m=0;p=0;t=0;e=1;num=0;i_str=0;
   strTOKEN[i_str]=‘\0‘;                   //其它变量初始化
   break;
    case 2:n=10*n+w[i]-48;
       break;
    case 3:t=1;
   break;
    case 4:n=10*n+w[i]-48; m++;
   break;
    case 5:t=1;
   break;
    case 6:if (w[i]==‘-‘) e=-1;
   break;
    case 7:p=10*p+w[i]-48;
   break;
    case 8:strTOKEN[i_str++]=w[i];  //将ch中的符号拼接到strTOKEN的尾部;
  break;
    case 9:strTOKEN[i_str++]=w[i];  //将ch中的符号拼接到strTOKEN的尾部;
  break;
case 10:strTOKEN[i_str++]=w[i]; //将ch中的符号拼接到strTOKEN的尾部;
   break;
    case 11:num=n*pow(10.0e*p-m);           //计算常数值
           tok[i_token].code=2;  tok[i_token++].value=InsertConst(num);  //生成常数Token
            num_token++;
break;
case 12:strTOKEN[i_str]=‘\0‘;
           code=Reserve(strTOKEN);                   //查关键字表
           if (code) 
     { 
   tok[i_token].code=code;  tok[i_token++].value=0;
   }   //生成关键字Token
else 
{ tok[i_token].co

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        134  2011-10-30 15:42  编译原理实验\readme.txt

     文件      88064  2011-10-28 14:42  编译原理实验\SimpleComplier\Debug\SimpleComplier.exe

     文件     604764  2011-10-28 14:42  编译原理实验\SimpleComplier\Debug\SimpleComplier.ilk

     文件     887808  2011-10-28 14:42  编译原理实验\SimpleComplier\Debug\SimpleComplier.pdb

     文件         73  2011-10-28 13:05  编译原理实验\SimpleComplier\SimpleComplier\code.txt

     文件       9844  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\BuildLog.htm

     文件         67  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\mt.dep

     文件        663  2011-10-28 12:56  编译原理实验\SimpleComplier\SimpleComplier\Debug\SimpleComplier.exe.embed.manifest

     文件        728  2011-10-28 12:56  编译原理实验\SimpleComplier\SimpleComplier\Debug\SimpleComplier.exe.embed.manifest.res

     文件        621  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\SimpleComplier.exe.intermediate.manifest

     文件     227033  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\simpleComplier.obj

     文件     199680  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\vc90.idb

     文件     241664  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\Debug\vc90.pdb

     文件      10006  2011-10-28 14:42  编译原理实验\SimpleComplier\SimpleComplier\simpleComplier.cpp

     文件       4000  2011-10-28 13:06  编译原理实验\SimpleComplier\SimpleComplier\SimpleComplier.vcproj

     文件       1427  2011-10-28 15:53  编译原理实验\SimpleComplier\SimpleComplier\SimpleComplier.vcproj.NEU-C631077854A.wanyao.user

     文件    2313216  2011-10-28 15:53  编译原理实验\SimpleComplier\SimpleComplier.ncb

     文件        908  2011-10-28 12:55  编译原理实验\SimpleComplier\SimpleComplier.sln

    ..A..H.     13824  2011-10-28 15:53  编译原理实验\SimpleComplier\SimpleComplier.suo

     文件     243712  2011-11-01 15:30  编译原理实验\编译实验报告最终版.doc

     目录          0  2011-10-30 15:39  编译原理实验\SimpleComplier\SimpleComplier\Debug

     目录          0  2011-10-30 15:39  编译原理实验\SimpleComplier\Debug

     目录          0  2011-10-30 15:39  编译原理实验\SimpleComplier\SimpleComplier

     目录          0  2011-10-30 15:39  编译原理实验\SimpleComplier

     目录          0  2011-11-01 15:30  编译原理实验

----------- ---------  ---------- -----  ----

              4848236                    25


评论

共有 条评论