资源简介
PL/0功能扩充break功能,自己写的,绝对原版
作者:谢连义 山东建筑大学计算机系
作者:谢连义 山东建筑大学计算机系
代码片段和文件信息
/************ PL0.c *************/
// pl0 compiler source code
#include
#include
#include
#include
#include “set.h“
#include “set.c“
#include “pl0.h“
//////////////////////////////////////////////////////////////////////
// print error message.
void error(n)
{
int i;
printf(“ “);
for (i = 1; i <= cc - 1; i++)
printf(“ “);
printf(“^\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;//读进下一行
printf(“%5d “ cx);
while (!feof(infile) && (ch = getc(infile))!=‘\n‘)
{
printf(“%c“ ch);
line[++ll] = ch;
} // while
printf(“\n“);
line[++ll] = ‘ ‘;
}
ch = line[++cc];
} // getch
//////////////////////////////////////////////////////////////////////
// gets a symbol from input stream.
void getsym(void)
{
int i k;
char a[MAXIDLEN + 1];
while (ch == ‘ ‘)//如果是空格就继续读入到ch,直到不是空格为止
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_NULL; // 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; // <
}
}
else
{ // other tokens
i = NSYM;
csym[0] = ch;
while (csym[i--] != ch);
if (++i)
{
sym = ssym[i];
getch();
}
else
{
printf(“Fatal Error: Unknown character.\n“);
exit(1);
}
}
} // getsym
//////////////////////////////////////////////////////////////////////
// generates (assembles) an instruction.
void gen(int x int y int z)
{
if (cx > CXMAX)
{
printf(“Fatal Error: Program too long.\n“);
exit(1);
}
code[cx].f = x;
code[cx].l = y;
code[cx++].a = z;
} // gen
/////////////////////////////////////////////////////////
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 18447 2009-07-01 11:32 plo\pl0.c
文件 18313 2009-06-30 22:04 plo\pl0.c.bak
文件 4346 2009-07-01 10:03 plo\PL0.h
文件 4349 2009-06-30 21:56 plo\PL0.h.bak
文件 355328 2009-03-22 19:24 plo\PL0文档.doc
文件 1608 2009-03-22 19:24 plo\set.c
文件 380 2009-03-22 19:24 plo\set.h
文件 149 2009-07-01 11:20 plo\test.txt
文件 132 2009-07-01 11:29 plo\test2.txt
目录 0 2009-07-02 09:28 plo
----------- --------- ---------- ----- ----
403052 10
相关资源
- 山东大学编译原理PL/0语言 compiler实验
- pl/0编译器 语法分析
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
- 编译原理实验题——PL/0语言编译器设
- First集和Follow集生成算法模拟
- 编译原理课程设计(词法分析和语法
- 编译原理课程设计 SLR(1)文法
- 编译原理课程设计源代码
- 15年编译原理课程设计
- seulex编译原理课程设计
- 编译原理课程设计
- 广东工业大学编译原理课程设计
- 编译原理课程设计源代码和超强报告
- 编译原理课程设计代码 赋值语句的递
- 编译原理课程设计LR分析器
- 编译原理课程设计lr0分析器
- 为PL/0语言建立一个语法分析程序BLO
- 编译原理课程设计布尔表达式的语法
- PL/0编译程序的语法分析实验报告
- 编译原理课程设计LL(1)分析过程模
- 《编译原理课程设计》-布尔表达式的
- 编译原理课程设计--编译器
- pl/0关于主程序block的分析
- 编译原理课程设计词法分析程序
- 编译原理PL/0 语言编译器分析实验报告
- 编译原理课程设计SLR(1)/SLR1分析器
- 编译原理课程设计之编译器完整代码
评论
共有 条评论