Welcome![Sign In][Sign Up]
Location:
Search - PL0 F

Search list

[ELanguagepl/0

Description: /*PL/0编译系统C版本头文件pl0.h*/ /* typedef enum { false, true } bool; */ #define norw 13 /*关键字个数*/ #define txmax 100 /*名字表容量*/ #define nmax 14 /*number的最大位数*/ #define al 10 /*符号的最大长度*/ #define amax 2047 /*地址上界*/ #define levmax 3 /*最大允许过程嵌套声明层数[0,levmax]*/ #define cxmax 200 /*最多的虚拟机代码数*/ /*符号*/ enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon, period, becomes, beginsym, endsym, ifsym, thensym, whilesym, writesym, readsym, dosym, callsym, constsym, varsym, procsym, }; #define symnum 32 /*名字表中的类型*/ enum object{ constant, variable, procedur, }; /*虚拟机代码*/ enum fct{ lit, opr, lod, sto, cal, inte, jmp, jpc, }; #define fctnum 8 /*虚拟机结构代码*/ struct instruction { /*454*/ enum fct f; // 虚拟机代码指令 int l; //引用层与声明层的层次差 int a; //根据f的不同而不同 }; FILE * fas; //输出名字表 FILE * fa; //输出虚拟机代码 FILE * fa1; //输出源文件及其各行对应的首地址 FILE * fa2; //输出结果 bool listswitch; //显示虚拟机代码与否 bool tableswitch; //显示名字与否 char ch; //获取字符的缓冲区,getch使用 enum symbol sym; //当前的符号 char id[al+1]; //当前ident,多出的一个字节用于存放0 int num; //当前number int cc,ll; //getch使用的计数器,cc表示当前字符(ch)的位置 int cx; //虚拟机代码指针,取值范围[0,cxmax-1] char line[81]; //读取行缓冲区 char a[al+1]; //临时符号,多出的一个字节用于存放0 struct instruction code[cxmax]; //存放虚拟机代码的数组 char word[norw][al]; //保留字 enum symbol wsym[norw]; //保留字对应的符号值 enum symbol ssym[256]; //单字符的符号值 char mnemonic[fctnum][5]; //虚拟机代码指令名称 bool declbegsys[symnum]; //表示声明开始的符号集合 bool statbegsys[symnum]; //表示语句开始的符号集合 bool facbegsys[symnum]; //表示因子开始的符号集合 //名字表结构 struct tablestruct { char name[al]; //名字 enum object kind; //类型:const,var,array or procedure int val; //数值,仅const使用 int level; //所须层,仅const不能用 int adr; //地址,仅const不能用 int size; //需要分配的数据空间,仅procedure使用 }; struct tablestruct table[txmax]; //名字表 FILE * fin; FILE * fout; char fname[al]; int err; //错误计数器 //当函数中发生fatal error时,返回-1告知调用它的函数,最终退出程序 #define getsymdo if(-1==getsym()) return -1 #define getchdo if(-1==getch()) return -1 #define testdo(a,b,c) if(-1==test(a,b,c)) return -1 #define gendo(a,b,c) if(-1==gen(a,b,c)) return -1 #define expressiondo(a,b,c) if(-1==expression(a,b,c)) return -1 #define factordo(a,b,c) if(-1==factor(a,b,c)) return -1 #define termdo(a,b,c) if(-1==term(a,b,c)) return -1 #define conditiondo(a,b,c) if(-1==condition(a,b,c)) return -1 #define statementdo(a,b,c) if(-1==statement(a,b,c)) return -1 #define constdeclarationdo(a,b,c) if(-1==constdeclaration(a,b,c)) return -1 #define vardeclarationdo(a,b,c) if(-1==vardeclaration(a,b,c)) return -1 void error(int n); int getsym(); int getch(); void init(); int gen(enum fct x,int y ,int z); int test(bool *s1,bool *s2,int n); int inset(int e,bool *s); int addset(bool *str,bool * s1,bool * s2,int n); int subset(bool *str,bool * s1,bool * s2,int n); int mulset(bool *str,bool * s1,bool * s2,int n); int block(int lev,int tx,bool * fsys); void interpret(); int factor(bool * fsys,int * ptx,int lev); int term(bool * fsys,int * ptx,int lev); int condition(bool * fsys,int * ptx,int lev); int expression(bool * fsys,int * ptx,int lev); int statement(bool * fsys,int * ptx,int lev); void listcode(int cx0); int vardeclaration(int *ptr, int lev,int *ptx); int constdeclaration(int *ptr, int lev,int *ptx); int position(char * idt,int tx); void enter(enum object k,int * ptx,int lev, int * pdx); int base(int l,int * s,int b)
Platform: | Size: 25139 | Author: xqq771084591 | Hits:

[ELanguagepl0

Description: 1)增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN 运算符 +=,-=,++,―― 其中FOR,TO,DOWNTO,RETURN属于选做内容。 (2)修改单词:不等号# 改为 <> (3)增加条件语句的ELSE子句 (4)增加单词:保留字 ELSE,FOR,TO,DOWNTO,REPEAT, DOWHILE, UNTIL。 (5)增加运算:++ 和 --。(已做,前++ 后++ 前-- 后--) (6)其他典型语言设施。(已做for 语句) (7)添加编译错误提示功能-1) To increase word: reserved word ELSE, FOR, TO, DOWNTO, RETURN operator 2B !=,-=,++,- One of FOR, TO, DOWNTO, RETURN contents are elected to do. (2) amend the word: No. 23 ranged! Changed to
Platform: | Size: 366592 | Author: caidongyun | Hits:

[ELanguagePL0Compiler-C

Description: PL/0编译器C++/C版本 1. 测试文件必须是以testin.pl0命名的文件。 2. 成功运行测试程序后,会生成testout.txt的文件,里面包括代码、指令和运行结果。 3、First.cpp--只包含词法语法分析,Error.cpp--加入了出错处理,All.cpp--包含代码生成和解释程序,是完整编译器。-请键入文字或网站地址,或者上传文档。 取消 PL/0 biānyì qì C++/C bǎnběn 1. Cèshì wénjiàn bìxū shì yǐ testin.Pl0 mìngmíng de wénjiàn. 2. Chénggōng yùnxíng cèshì chéngxù hòu, huì shēngchéng testout.Txt de wénjiàn, lǐmiàn bāokuò dàimǎ, zhǐlìng hé yùn háng jiéguǒ. 3,First.Cpp--zhǐ bāohán cífǎ yǔfǎ fēnxī,Error.Cpp--jiārùle chūcuò chu lǐ,All.Cpp--bāohán dàimǎ shēngchéng hé jiěshì chéngxù, shì wánzhěng biānyì qì. 您是不是要找: pascal 子语言 pl 0编译器 解释器 pascal编写 PL/0 compiler C++/C version 1 test file named file must be based testin.pl0. (2) After successfully running the test program will generate testout.txt file, which includes the code, instructions and operating results. 3, First.cpp-- contains only syntax analysis, Error.cpp-- added error handling, All.cpp-- include code generation and interpretation procedures are complete compiler.
Platform: | Size: 10240 | Author: 夏日星 | Hits:

CodeBus www.codebus.net