语法分析器完整程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//#include
/*
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
*/
/****************************************************/
/* pas.c */
/* 高级语言到四元式*/
/****************************************************/
#include "iostream"
#include "stdio.h"
#include "string.h"
#include "time.h"
#include "conio.h"
void my_delay(unsigned long ms)
{
double start_time = (double)clock() / CLOCKS_PER_SEC * 1000;
while ( (double)clock() / CLOCKS_PER_SEC * 1000 - start_time < ms ) ; }
#define ACC -2
/****************************************/
#define sy_if 0
#define sy_then 1
#define sy_else 2
#define sy_while 3
#define sy_begin 4
#define sy_do 5
#define sy_end 6
#define a 7
#define semicolon 8
#define e 9
#define jinghao 10
#define S 11
#define L 12
#define tempsy 15
#define EA 18 /*E and*/
#define EO 19 /*E or*/
#define plus 34
#define minus 35 //添加减号的关键字
#define times 36
#define division 37 //添加除号的关键字
#define becomes 38
#define op_and 39
#define op_or 40
#define op_not 41
#define rop 42
#define lparent 48
#define rparent 49
#define ident 56
#define intconst 57
/******************************************/ char ch='\0';/*当前字符*/
int count=0;
static char spelling[10]={""};/*存放识别的字*/ static char line[81]={""};/*一行字符缓冲区*/ char *pline;/*字符缓冲区指针*/
char ch_exit;
static char ntab1[100][10];
struct ntab
{
int tc;
int fc;
}ntab2[200];
int label=0;
/*存放临时变量的表的定义*/
struct rwords{
char sp[10];
int sy;
};
/*存放文件的结构*/
struct rwords reswords[10]={{"if",sy_if},
{"do",sy_do},
{"else",sy_else},
{"while",sy_while},
{"then",sy_then},
{"begin",sy_begin},
{"end",sy_end},
{"and",op_and},
{"or",op_or},
{"not",op_not}}; struct aa{
int sy1;
int pos;
}buf[1000],/*词法分析结果缓冲区*/
n,/*当前字符*/
n1,/*当前表达式中的字符*/
E,/*非终结符*/
sstack[100],/*符号栈*/
ibuf[100],
stack[1000];
struct aa oth;
struct fourexp{
char op[10];
struct aa arg1;
struct aa arg2;
int result;
}fexp[200];
/*四元式的结构*/
int ssp=0;/*指向sstack[100]*/
struct aa *pbuf=buf;/*指向词法分析缓冲区*/
int nlength=0;
int lnum=0;/*源程序长度*/
int tt1=0;
FILE *cfile;
FILE *mfile;
/*********************************************************/ int newt=0;
/*临时变量*/
int nxq=100;
/*nxq指向下一个形成的四元式的地址*/
int lr;
int lr1;
int sp=0;
/* 状态栈定义*/
int stack1[100];
int sp1=0;
/*状态栈1的定义*/
int num=0;
struct ll{
int nxq1;
int tc1;
int fc1;
}labelmark[10];
int labeltemp[10];