编译器
文章平均质量分 79
hexiaomin_1984
这个作者很懒,什么都没留下…
展开
-
Tiny语言编译器开发之词法分析
对于Tiny语言编写的Sample程序源代码如下:{ Sample program in TINY language - computes factorial}read x; { input an integer }if 0 < x then { don't compute if x <=0 } fact := 1; repeat fact := fact* x原创 2014-02-24 15:03:40 · 988 阅读 · 0 评论 -
Tiny语言编译器之TM虚拟机开发
这里的虚拟机是是Tiny语言的运行环境,源代码如下:#include #include #include #include #ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif#define IADDR_SIZE 1024 //指令存储区大小#define DADDR_SIZE 1024 //数原创 2014-02-24 15:04:06 · 1738 阅读 · 0 评论 -
Tiny语言编译器开发之词法分析(利…
输入文件为tiny.l,内容如下%{#include "globals.h"#include "util.h"#include "scan.h"char tokenString[MAXTOKENLEN+1];extern int lineno;%}digit [0-9]number {digit}+letter [a-zA-Z]identifier {letter}+new原创 2014-02-24 15:03:47 · 781 阅读 · 0 评论 -
利用Yacc生成LR语法分析器的关键点…
实际上利用Yacc生成LR语法分析器(一般是Lookahead分析方法)还是比较简单的,而且写一个文法满足Yacc的要求也非常容易,主要的工作量体现在一个产生式被识别后的动作如何编写,尤其是有时候需要在一个产生式中嵌入一个动作,这个动作产生的时机是什么,产生这个动作时当前的token是什么一定要非常清楚,通过这几天的研究,基本上对这个问题已经有了一个了解,这里做一些总结。 首先,Yacc中判原创 2014-02-24 15:03:57 · 1052 阅读 · 0 评论 -
Tiny语言编译器之代码生成
代码生成是Tiny编译器的最后一项工作,代码生成的基础是语法树和符号表,遍历语法树,生成能够被TM虚拟机执行的指令,其中if语句和repeat语句需要利用emitSkip、emitBackup进行代码回填,因为只有全部语句指令生成完成以后才知道跳转地址。代码生成的源代码如下:#include "globals.h"#include "symtab.h"#include "code.h"#i原创 2014-02-24 15:04:10 · 977 阅读 · 0 评论 -
Tiny语言编译器之语义分析
Tiny语言的语义分析非常简单,第一步先遍历语法树建立符号表,但是这个符号表本身并没有太大的用处,只是为变量分配了内存的地址,为代码生成做准备;第二步是类型检查,主要对if语句、repeat语句的条件进行检查,必须是Boolean类型的,另外有些表达式要求是Integer类型,类型检查采用后序遍历的方式。语义分析的源代码如下:#include "globals.h"#include "symt原创 2014-02-24 15:04:04 · 1810 阅读 · 0 评论 -
Tiny语言编译器之符号表
Tiny语言编译器的符号表还是很简单的,主要的是写了一个简单的哈希表,共有211个桶,采用拉链法,用另外一个链表记录了一个符号所出现的所有行号,源代码如下:#include #include #include #include "symtab.h"#define SHIFT 4#define SIZE 211//哈希函数static int hash(char* key)原创 2014-02-24 15:04:02 · 664 阅读 · 0 评论 -
Tiny语言编译器开发之语法分析(利…
采用自底向上的LR分析方法,Yacc输入文件yyparser.y如下:%{#define YYPARSER#include "globals.h"#include "util.h"#include "scan.h"#include "parse.h"#define YYSTYPE TreeNode *static char * savedName;static int saved原创 2014-02-24 15:03:55 · 732 阅读 · 0 评论 -
Tiny语言编译器开发之语法分析
采用自顶向下的分析方法中的递归下降分析法,手工编写语法分析器,源代码如下:#include "globals.h"#include "util.h"#include "scan.h"#include "parse.h"static TokenType token; //当前获取的tokenstatic TreeNode* stmt_sequence();static TreeNod原创 2014-02-24 15:03:51 · 1343 阅读 · 0 评论 -
Tiny语言编译器之TM虚拟机接口
TM虚拟机接口用于生成TM指令,源代码如下://code.h//TM接口#ifndef _CODE_H_#define _CODE_H_#define pc 7 //程序寄存器#define mp 6 //指向数据区顶部#define gp 5 //指向数据区底部#define ac 0#define ac1 0//输出寄存器指令void emitRO(char原创 2014-02-24 15:04:08 · 732 阅读 · 0 评论