资源简介
功能完整的PL0编译器,附带多个测试用例,可以用于编译技术课程实践参考
代码片段和文件信息
// pl0 compiler source code
#include
#include
#include
#include
#include “set.h“
#include “pl0.h“
char total[MAXIDLEN + 1];
//#include “set.c“
int flag1=0sign=0;
//////////////////////////////////////////////////////////////////////
// print error message.
//出错处理
void error(int n)
{
int i;
printf(“ “);
for (i = 1; i <= cc - 1; i++)
printf(“ “);
fprintf(outfile “ “);
fprintf(outfile “^\n“);
printf(“^\n“);
fprintf(outfile “Error %3d: %s\n“ n err_msg[n]);
printf(“Error %3d: %s\n“ n err_msg[n]);
err++;
} // error
//////////////////////////////////////////////////////////////////////
//获取下一个字符
void getch(void)
{
if (cc == ll)
{
if (feof(infile))
{
printf(“\nPROGRAM INCOMPLETE\n“);
exit(1);
}
ll = cc = 0;
fprintf(outfile “%5d “ cx);
printf(“%5d “ cx);
while ( (!feof(infile)) // added & modified by alex 01-02-09
&& ((ch = getc(infile)) != ‘\n‘))
{
fprintf(outfile “%c“ ch);
printf(“%c“ ch);
line[++ll] = ch;
} // while
fprintf(outfile “\n“);
printf(“\n“);
line[++ll] = ‘ ‘;
}
ch = line[++cc];
} // getch
//////////////////////////////////////////////////////////////////////
// gets a symbol from input stream.
void zhushi()
{
while(ch!=‘*‘)
{
getch();
}
if(ch==‘*‘)
{
getch();
if(ch==‘)‘)
getch();
else
{
zhushi();
}
}
else
{
error(27); //报错
}
}
//////////////////////////////////////////////////////////////////////
// gets a symbol from input stream.
//词法分析,获取下一个标识符
void getsym(void)
{
int i k;
char a[MAXIDLEN + 1];
while (ch == ‘ ‘|| ch == ‘\t‘)
// modified by yzhang 02-03-12add some white space
getch();
if (isalpha(ch))
{ // symbol is a reserved word or an identifier.
k = 0;
do
{
if (k < MAXIDLEN)
a[k++] = ch;
getch();
}
while (isalpha(ch) || isdigit(ch));
a[k] = 0;
strcpy(id a);
word[0] = id;
i = NRW;
while (strcmp(id word[i--]));
if (++i)
sym = wsym[i]; // symbol is a reserved word
else
sym = SYM_IDENTIFIER; // symbol is an identifier
}
else if (isdigit(ch))
{ // symbol is a number.
k = num = 0;
sym = SYM_NUMBER;
do
{
num = num * 10 + ch - ‘0‘;
k++;
getch();
}
while (isdigit(ch));
if (k > MAXNUMLEN)
error(25); // The number is too great.
}
else if (ch == ‘:‘)
{
getch();
if (ch == ‘=‘)
{
sym = SYM_BECOMES; // :=
getch();
}
else
{
sym = SYM_COLON; // illegal?
}
}
else if (ch == ‘>‘)
{
getch();
if (ch == ‘=‘)
{
sym = SYM_GEQ; // >=
getch();
}
else
{
sym = SYM_GTR; // >
}
}
else if (ch == ‘<‘)
{
getch();
if (ch == ‘=‘)
{
sym = SYM_LEQ; // <=
getch();
}
else if (ch == ‘>‘)
{
sym = SYM_NEQ; // <>
getch();
}
else
{
sym = SYM_LES; // <
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-07-19 14:04 pl0\Debug\
文件 14846 2012-07-19 14:04 pl0\Debug\BuildLog.htm
文件 444 2004-08-27 22:30 pl0\Debug\hbin.txt
文件 67 2012-07-19 14:04 pl0\Debug\mt.dep
文件 393216 2012-07-19 14:04 pl0\Debug\pl0.exe
文件 406 2012-07-19 13:50 pl0\Debug\pl0.exe.em
文件 472 2012-07-19 13:50 pl0\Debug\pl0.exe.em
文件 381 2012-07-19 14:04 pl0\Debug\pl0.exe.intermediate.manifest
文件 242156 2012-07-19 14:04 pl0\Debug\pl0.ilk
文件 71198 2012-07-19 14:04 pl0\Debug\pl0.obj
文件 1936384 2012-07-19 14:04 pl0\Debug\pl0.pdb
文件 8720 2012-07-19 13:50 pl0\Debug\set.obj
文件 1641 2004-08-27 22:30 pl0\Debug\test.out
文件 233 2004-08-27 22:25 pl0\Debug\test.pl0
文件 0 2004-08-27 22:21 pl0\Debug\test.pl0.bak
文件 41984 2012-07-18 10:35 pl0\Debug\vc60.idb
文件 53248 2012-07-18 10:35 pl0\Debug\vc60.pdb
文件 44032 2012-07-19 14:04 pl0\Debug\vc90.idb
文件 61440 2012-07-19 14:04 pl0\Debug\vc90.pdb
文件 832 2012-07-18 10:35 pl0\hbin.txt
文件 27237 2012-07-19 14:23 pl0\pl0.c
文件 4420 2004-08-27 22:34 pl0\pl0.dsp
文件 529 2004-08-27 22:34 pl0\pl0.dsw
文件 5613 2012-07-18 10:19 pl0\pl0.h
文件 470016 2012-07-19 14:23 pl0\pl0.ncb
文件 48640 2012-07-18 10:36 pl0\pl0.opt
文件 893 2012-07-18 10:35 pl0\pl0.plg
文件 871 2012-07-19 13:50 pl0\pl0.sln
文件 9728 2012-07-19 14:23 pl0\pl0.suo
文件 5632 2012-07-19 13:50 pl0\pl0.vcproj
文件 1409 2012-07-19 14:23 pl0\pl0.vcproj.LENOVO.Administrator.user
............此处省略10个文件信息
- 上一篇:西工大计算机组成原理试题22套
- 下一篇:Linux设备驱动模型详解
相关资源
- 51单片机 HTU21D 温湿度程序 完整版
- 简易编译器,实现词法分析,语法分
- 软件工程酒店客房管理系统设计报告
- Project(完整的项目案例).rar
- EDA电子琴设计课程设计完整代码
- 北方工业大学语法分析器 (1)完整实
- 网上书店管理系统分析、设计及实现
- 基于51单片机的全自动洗衣机控制系统
- 网上书城的完整需求分析报告
- UMLUML案例(完整建模)(汽车租赁系
- 编译原理PL/0 语言编译器分析实验报告
- 《项目需求分析说明书》模板(完整
- kaggle实战教程视频共计完整的八个课
- 性能测试诊断分析与优化 完整版 pd
- qt写的俄罗斯方块完整代码
- 基于51单片机的智能火灾报警系统-完
- 中国科学院大学-国科大-移动互联网
- CentOS7下Elasticsearch高可用集群方案-完
- 二维主分量分析(2DPCA) 完整的2DP
- 编译原理课程设计之编译器完整代码
- 图书管理系统项目软件项目计划完整
- PL0词法语法分析器225358
- 北航数值分析大作业一二三题完整版
- 智能电子体温计设计包括论文和程序
- 100个VHDL
- 校园网的完整配置命令
- 《计算机软件文档编制规范》GB-T856
- STM32串口的LIN从模式完整代码
- 三次样条函数计算很完整看了就明白
- 数字秒表--EDA课程设计完整版(设计报
评论
共有 条评论