0pluspluscompiler专题

学习使用的PL/0编译器增强版PL/0plusplusCompiler(五)使用代替#不等于号

思路就是在检测小于号时检测一下如果后边为大于号就把当前的token组合识别为不等于号。 /*词法分析,获取一个符号*/int getsym(){int i,j,k;while( ch==' '||ch==10||ch==9){getchdo;}if(ch>='a'&&ch<='z'){ k=0;do{if(k<al){ a[k]=ch;k++;}getchdo; }while(ch>='a'

学习使用的PL/0编译器增强版PL/0plusplusCompiler(四)使用gdb调试PL0词法分析

默认已经把编译器编译成pl0c可执行程序了 1. 使用gdb把程序运行起来 gdb ./pl0c 2. 加断点 break getsym 意思是在getsym这个函数加断点 3. 加参数执行 r test.pl0 因为需要分析test.pl0这个源代码文件,所以需要这个参数 r是run 4. continue执行 c 每运行到getsym会停

学习使用的PL/0编译器增强版PL/0plusplusCompiler(三)加入“man” 功能

Linux中很赞的工具man,查看命令或者工具的帮助手册manual。 在PL0.h中声明help方法, void help(); 在PL0.c中实现help这个方法, /*显示帮助文档*/void help(){printf("\n\nPL0 plus plus Compiler:\n");printf("编译源码: pl0 test.pl0\n");printf("显示帮助文档

学习使用的PL/0编译器增强版PL/0plusplusCompiler(二)加入支持命令行参数

每次程序运行后输入源码文件名不是很好,于是做了支持命令行参数的改进。大体思路:在main函数入口加入命令行参数,进入main后判断文件名是否为空,为空就退出,否则就继续编译。 在main的括号中加入 int argc, char** argv 在main第一行加入 /*如果没有在命令行中输入文件名会提示输入源码文件名*/if(argv[1]==NULL){printf("请输入源程序!\

学习使用的PL/0编译器增强版PL/0plusplusCompiler(一)源码及使用

一个计算机科学家做的C语言实现的一个比较简单的学习研究用的编译器,PL/0 Compiler。正在学习编译原理,所以自己修改一下。 这个编译器只有两个文件。PL0.c、PL0.h /*PL/0 编译系统C版本头文件 pl0.h*/typedef enum{false,true}bool;# define norw 13 /*关键字个数*/# define