• 大小: 51KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-20
  • 语言: C/C++
  • 标签: plo编译器  c语言  

资源简介

plo编译器 c语言 含测试实例 以及实验报告 适合初学者下载

资源截图

代码片段和文件信息

// Grammar.cpp: implementation of the Grammar class.
//
//////////////////////////////////////////////////////////////////////
#include 
#include 
#include 
#include 
#include “Word.h“
#include “Table.h“
#include “pcode.h“
#include “Grammar.h“

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

#define $program 1
#define $const 2
#define $var 3
#define $procedure 4
#define $begin 5
#define $if 6
#define $while 7
#define $call 8
#define $read 9
#define $write 10
#define $end 11
#define $then 12
#define $else 13
#define $do 14
#define $odd 15
#define $lop 16          // → =|<>|<|<=|>|>=
#define $aop 17          // → +|-
#define $mop 18          // → *|/
#define $id 19           // → l{l|d}
#define $integer 20      // → d{d}
#define $ 21             // ;
#define $equal 22        // :=
#define $and 23          // 
#define $leftbrack 24    //(
#define $rightbrack 25   //)

//using namespace std;

Grammar::Grammar(Simpsc *p)
{
pl=p;
}

bool Grammar::Analysis(Word *Token)
{
lev=-1;
i=0;
if(!ProceProg(Token))
{
cout<<“出现语法错误,分析中断,请检查程序“< return false;
}
else
cout<<“分析成功,该程序无语法错误“< return true;
}

char *Grammar::ReturnName(Word *Token)
{
// char name[30];
// strcpy(namethis->Token[i].ReturnCont());
// return name;
return Token[i].ReturnCont();
}

void Grammar::ConstVar(Word *Token)
{
Table *tb=pl->ChaTable;
tb->Enter(constantToken);
}

void Grammar::ConstDecla(Word *Token)
{
char con[16];
int num;
Table *tb=pl->ChaTable;
strcpy(conToken[i].ReturnCont());
num=atoi(con);
tb->GetVal(num);
}

void Grammar::VarDecla(Word *Token)
{
Table *tb=pl->ChaTable;
tb->Enter(variableToken);
dx[lev]++;
}

bool Grammar::ProceFactor(Word *Token)              //||(
{
int pnum;
char con[16];
Table *tb=pl->ChaTable;
pcode *cd=pl->CodeList;

if(Token[i].ReturnWType()==$id)
{
p=tb->Position(Token[i].ReturnCont());
if(p==0)
{
Token[i].ReturnXY(bxexy);
cout<<“未申明的标识符!!第“< return false;
}
else
{
switch(tb->table[p].kind)
{
case constant:
cd->Gen(LIT0tb->table[p].val);
break;
case variable:
cd->Gen(LODlev-tb->table[p].leveltb->table[p].adr);
break;
case procedure:
Token[i].ReturnXY(bxexy);
cout<<“错误的标识符,函数名不可用于表达式:第“< return false;
break;
}
}
i++;
}
else if(Token[i].ReturnWType()==$integer)
{
strcpy(conToken[i].ReturnCont());
num=atoi(con);
cd->Gen(LIT0num);
i++;
}
else if(Token[i].ReturnWType()==$leftbrack)
{
i++;
if(!ProceExp(Token))
return false;
if(Token[i].ReturnWType()==$rightbrack)
i++;
else
{
Token[i].ReturnXY(bxexy);
cout<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2008-07-22 10:21  compile\
     文件        5027  2008-01-17 18:32  compile\compile.dsp
     文件         539  2008-01-03 14:37  compile\compile.dsw
     文件       74752  2008-01-18 13:40  compile\compile.ncb
     文件       53760  2008-01-18 13:40  compile\compile.opt
     文件        1569  2008-01-18 12:47  compile\compile.plg
     目录           0  2008-01-11 19:05  compile\Debug\
     文件         342  2008-01-18 10:49  compile\fibo.cod
     文件         148  2008-01-17 19:13  compile\fibo.txt
     文件         292  2008-01-17 22:22  compile\gcd.cod
     文件         129  2008-01-17 22:23  compile\gcd.txt
     文件        9934  2008-01-15 16:09  compile\GramAny.h
     文件       14347  2008-01-17 22:56  compile\Grammar.cpp
     文件        1022  2008-01-18 10:59  compile\Grammar.h
     文件         669  2008-01-17 22:15  compile\main.cpp
     文件         160  2008-01-18 10:55  compile\PascalText.txt
     文件        4557  2008-01-18 09:11  compile\pcode.cpp
     文件         869  2008-01-17 20:11  compile\pcode.h
     文件         826  2008-01-18 13:37  compile\PL0语言的BNF描述.txt
     文件        1917  2008-01-17 23:01  compile\Simpsc.cpp
     文件        1085  2008-01-18 12:47  compile\Simpsc.h
     文件         284  2008-01-18 09:05  compile\t1.cod
     文件         107  2008-01-17 22:23  compile\t1.txt
     文件         270  2008-01-18 13:38  compile\t2.cod
     文件         147  2008-01-17 22:30  compile\t2.txt
     文件        1145  2008-01-17 21:42  compile\Table.cpp
     文件         741  2008-01-18 08:43  compile\Table.h
     文件        2352  2008-01-18 12:54  compile\TokenFile.dat
     文件         811  2008-01-17 21:13  compile\Word.cpp
     文件         842  2008-01-17 21:09  compile\Word.h
     文件        3867  2008-01-17 17:41  compile\WordAny.cpp
............此处省略2个文件信息

评论

共有 条评论