- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理上机实验程序(LR分析)
小型编译程序:高级语言到四元式的编译
#include stdio.h /*如果使用TC的话,需要配置头文件路径*/
#include string.h /*如果使用VC的话,可以配置头文件conio.h*/
#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 E0 19 /*E or*/
#define plus 34
#define times 36
#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]={}; /*一行字符缓冲区,最多80个字符*/
char *pline; /*字符缓冲区指针*/
static char ntab1[100][10]; /*变量名表,共100项,每项长度10*/
struct ntab
{
int tc; /*真值*/
int fc; /*假值*/
}ntab2[200]; /*在布尔表达式E中保存有关布尔变量的真、假值*/
int label=0; /*指向ntab2的指针*/
struct rwords{ /*存放临时变量的表的定义*/
char sp[10];
int sy;
};
/*(保留字表)匹配表的结构,用来与输入缓冲区中的单词进行匹配*/
/*匹配表初始化,大小为10*/
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栈指针*/
struct aa *pbuf=buf; /*指向词法分析缓冲区的指针*/
int nleng
文档评论(0)