資源簡(jiǎn)介
plo編譯器 c語(yǔ)言 含測(cè)試實(shí)例 以及實(shí)驗(yàn)報(bào)告 適合初學(xué)者下載

代碼片段和文件信息
//?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??????//?→?dy5yi5ur
#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<<“出現(xiàn)語(yǔ)法錯(cuò)誤,分析中斷,請(qǐng)檢查程序“< return?false;
}
else
cout<<“分析成功,該程序無(wú)語(yǔ)法錯(cuò)誤“< 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<<“未申明的標(biāo)識(shí)符!!第“< 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<<“錯(cuò)誤的標(biāo)識(shí)符,函數(shù)名不可用于表達(dá)式:第“< 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<
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????目錄???????????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語(yǔ)言的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個(gè)文件信息
評(píng)論
共有 條評(píng)論