资源简介
本资源是PL/0语言的语法分析程序(C语言版),外加输出语法树,每行附带注释,可读性强,下载下来配合.h文件即可编译
代码片段和文件信息
/*
* PL/0 complier program for win32 platform (implemented in C)
*
* The program has been test on Visual C++ 6.0 Visual C++.NET and
* Visual C++.NET 2003 on Win98 WinNT Win2000 WinXP and Win2003
*
* 使用方法:
* 运行后输入PL/0源程序文件?
*/
#include
#include
#include “pl0.h“
#include “string.h“
// 分割符,0表示0个‘--‘,1表示1个,以此类推
int Tree_level[500];
// 存单词
char* Tree[500];
// 数单个个数
int word_num = 0;
void Gen_grammerTree(){
int i=0;
printf(“\nGrammer Tree\n“);
for(i=0 ; i switch (Tree_level[i])
{
case 0:
printf(“%s\n“Tree[i]);
break;
case 1:
printf(“--%s\n“Tree[i]);
break;
case 2:
printf(“----%s\n“Tree[i]);
break;
case 3:
printf(“------%s\n“Tree[i]);
break;
case 4:
printf(“--------%s\n“Tree[i]);
break;
case 5:
printf(“----------%s\n“Tree[i]);
break;
case 6:
printf(“------------%s\n“Tree[i]);
break;
case 7:
printf(“--------------%s\n“Tree[i]);
break;
case 8:
printf(“----------------%s\n“Tree[i]);
break;
case 9:
printf(“------------------%s\n“Tree[i]);
break;
case 10:
printf(“--------------------%s\n“Tree[i]);
break;
case 11:
printf(“----------------------%s\n“Tree[i]);
break;
case 12:
printf(“------------------------%s\n“Tree[i]);
break;
case 13:
printf(“--------------------------%s\n“Tree[i]);
break;
case 14:
printf(“----------------------------%s\n“Tree[i]);
break;
case 15:
printf(“------------------------------%s\n“Tree[i]);
break;
case 16:
printf(“--------------------------------%s\n“Tree[i]);
break;
default:
printf(“越界!!“Tree[i]);
break;
}
}
}
int main()
{
printf(“Input pl/0 file? “);
scanf(“%s“ fname); /* 输入文件名 */
// 打开一个文件 返回文件指针: FILE类型的指针变量 指向该文件
fin = fopen(fname “r“);
if (fin)
{
init(); /* 初始化 */
err = 0; // 计算已发现的错误个数
// cc、ll: getch使用的计数器 cc表示当前字符
// cx虚拟机代码指针 取值范围[0 cxmax-1]
cc = cx = ll = 0;
// 缓冲区中获取字符,getch 使用 初始化为一个空格
ch = ‘ ‘;
// 首次读一个字符 后面的在block里完成 其是递归程序
if(-1 != getsym())
{
// 记录语法树
int Grammer_level = 0;
Tree_level[word_num] = Grammer_level;
Tree[word_num] = “ <程序>“;
word_num+=1;
// 三个参数 1: 当前分程序所在层 2: 名字表当前尾指针 第三个就是标识了3种声明和6种语句的bool数组
// 第四个参数,表示语法树层数
if(-1 == block(0 0 Grammer_level+1)) /* 调用编译程序 */
{
fclose(fin);
相关资源
- 编译原理课程设计简单优先文法判定
- 词法分析器(c语言实现)246881
- cminus语法分析器源代码完整版
- 语法分析C实现
- 编译原理--语法分析 实验 C++版
- LL(1)文法自动生成语法分析程序的
- 编译原理--递归下降分析程序C++
- 编译原理 词法分析 源代码
- 编译原理大作业.zip
- c语言写的编译器
- 词法分析C++程序
- 编译原理——词法分析器设计与实现
- 编译原理 C语言实现词法分析
- 不同进制数的识别程序设计
- 编制一个读单词过程,从输入的源程
- 编译原理C语言实现词法分析程序带容
-
pl0_name
table.zip - 编译原理课程设计+报告用高级语言
- 编译原理SLR(1)语法分析实验报告
- 编译原理实验报告+语法分析代码C语言
- 基于算符优先分析方法的表达式语法
- 基于预测分析方法的表达式语法分析
- 编译原理 课设
- c++源码C-语法分析器源代码
- c++词法分析器
- 编译原理语法分析程序(C语言)
- 编译原理词法分析器 输入源程序 能生
- c语言语法分析器
- 词法分析程序设计与实现
- 编译原理实验报告 语法分析 语义分
评论
共有 条评论