資源簡介
對類似于C++的程序進行詞法分析,使用LR分析表進行語法分析

代碼片段和文件信息
/****************************************************/
/*??????????????pas.c???????????????????????????????*/
/*??????????高級語言到四元式????????????????????????*/
/****************************************************/
#include??“cplr.h“
char?chars;
/****************從文件讀一行到緩沖區***********************************/
void?readline()
{
char?ch1;
pline=line;
ch1=getc(cfile);
printf(“\t\t|\t“);
while?(ch1!=‘\n‘)
{
////////////////////////////////////////////////////////////////////////////
//my_delay(50);
printf(“%c“ch1);
///////////////////////////////////////////////////////////////////////////////
*pline=ch1;
pline++;
ch1=getc(cfile);//取下一個字符
if(ch1==EOF)
{
chars=ch1;
break;
}
}
*pline=‘\0‘;
pline=line;
printf(“\n“);
}
/*********************************從緩沖區讀一個字符************************/
void?readch()
{
if?(ch==‘\0‘)
{
readline();
lnum++;
}
ch=*pline;
pline++;
}
/****************標志符和關鍵字的識別************************************/
int?find(char?spel[])
{
int?ss1=0;
int?ii=0;
while((ss1==0)&&(ii {
if?(!strcmp(spelntab1[ii]))?ss1=1;
ii++;
}
if?(ss1==1)?return?ii-1;
else?return?-1;
}
void?identifier()
{
int?iii=0jk;
int?ss=0;
k=0;
do
{
spelling[k]=ch;
k++;
readch();
}while(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘0‘)&&(ch<=‘9‘)));
pline--;
spelling[k]=‘\0‘;
while((ss==0)&&(iii {
if?(!strcmp(spellingreswords[iii].sp))?ss=1;
iii++;
}
/*關鍵字匹配*/
if(ss==1)
{
buf[count].sy1=reswords[iii-1].sy;
}
else
{
buf[count].sy1=ident;
j=find(spelling);
if?(j==-1)
{
buf[count].pos=tt1;
strcpy(ntab1[tt1]spelling);
tt1++;
nlength++;
}
else?buf[count].pos=j;
}
count++;
for(k=0;k<10;k++)?spelling[k]=‘\0‘;
}
/*****************數字的識別***********************************/
void?number()
{
int?ivalue=0;
int?digit;
do
{
digit=ch-‘0‘;
ivalue=ivalue*10+digit;
readch();
}while((ch>=‘0‘)&&(ch<=‘9‘));
buf[count].sy1=intconst;
buf[count].pos=ivalue;
count++;
pline--;
}
/**************掃描主函數*************************************/
void?scan()
{
int?i;
while(chars?!=?EOF)
{
switch?(ch)
{
case?‘?‘:
break;
case?‘a‘:
case?‘b‘:
case?‘c‘:
case?‘d‘:
case?‘e‘:
case?‘f‘:
case?‘g‘:
case?‘h‘:
case?‘i‘:
case?‘j‘:
case?‘k‘:
case?‘l‘:
case?‘m‘:
case?‘n‘:
case?‘o‘:
case?‘p‘:
case?‘q‘:
case?‘r‘:
case?‘s‘:
case?‘t‘:
case?‘u‘:
case?‘v‘:
case?‘w‘:
case?‘x‘:
case?‘y‘:
case?‘z‘:
identifier();
break;
case?‘0‘:
case?‘1‘:
case?‘2‘:
case?‘3‘:
case?‘4‘:
case?‘5‘:
case?‘6‘:
case?‘7‘:
case?‘8‘:
case?‘9‘:
number();
break;
case?‘<‘:
readch();
if(ch==‘=‘)
{
buf[count].pos=0;
}
else
{
if(ch==‘>‘)?buf[count].pos=4;
else
{
buf[count].pos=1;
pline--;
}
}
buf[count].sy1=ro
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-07-09?14:04??簡單編譯器\
?????文件???????13256??2013-06-20?18:55??簡單編譯器\cplr.h
?????文件???????25033??2013-06-20?19:11??簡單編譯器\cplr2.c
?????文件??????101888??2013-06-20?19:12??簡單編譯器\cplr2.exe
?????文件???????44671??2013-06-20?19:12??簡單編譯器\cplr2.obj
?????文件?????????451??2013-06-20?19:13??簡單編譯器\pas.c
?????文件?????????524??2014-07-09?14:03??簡單編譯器\pas.med
- 上一篇:簡單的詞法分析器
- 下一篇:實驗室設備管理系統 c++ 課程設計
評論
共有 條評論