资源简介
广工编译原理实验
对PL/0作以下修改扩充:
(1)修改单词:不等号# 改为 != ,只有!符号为非法单词。
(2)增加单词(只实现词法分析部分):
保留字 ELSE,RETURN,FOR,STEP,UNTIL
运算符 *=,/=
(3)增加IF条件语句的ELSE子句(实现语法语义目标代码),
要求:写出相关文法,语法图,语义规则。
将我的Unit1.cpp文件覆盖掉你们的Unit1.cpp文件就可以
代码片段和文件信息
/*** PL0 COMPILER WITH CODE GENERATION ***/
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include “Unit1.h“
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource “*.dfm“
TForm1 *Form1;
//---------------------------------------------------------------------------
const AL = 10; /* LENGTH OF IDENTIFIERS */
const NORW = 19; /* # OF RESERVED WORDS */
const TXMAX = 100; /* LENGTH OF IDENTIFIER TABLE */
const NMAX = 14; /* MAX NUMBER OF DEGITS IN NUMBERS */
const AMAX =2047; /* MAXIMUM ADDRESS */
const LEVMAX= 3; /* MAX DEPTH OF BLOCK NESTING */
const CXMAX = 200; /* SIZE OF CODE ARRAY */
typedef enum { 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 PROGSYMELSESYMRETURNSYMFORSYMSTEPSYMUNTILSYMMULSYMDIVSYM
} SYMBOL;
char *SYMOUT[] = {“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“ “PROGSYM““ELSESYM““RETURNSYM““FORSYM““STEPSYM““UNTILSYM““MULSYM““DIVSYM“ };
typedef int *SYMSET; // SET OF SYMBOL;
typedef char ALFA[11];
typedef enum { CONSTANT VARIABLE PROCEDUR } objectS ;
typedef enum { LIT OPR LOD STO CAL INI JMP JPC } FCT;
typedef struct {
FCT F; /*FUNCTION CODE*/
int L; /*0..LEVMAX LEVEL*/
int A; /*0..AMAX DISPLACEMENT ADDR*/
} INSTRUCTION;
/* LIT O A -- LOAD CONSTANT A */
/* OPR 0 A -- EXECUTE OPR A */
/* LOD L A -- LOAD VARIABLE LA */
/* STO L A -- STORE VARIABLE LA */
/* CAL L A -- CALL PROCEDURE A AT LEVEL L */
/* INI 0 A -- INCREMET T-REGISTER BY A */
/* JMP 0 A -- JUMP TO A */
/* JPC 0 A -- JUMP CONDITIONAL TO A */
char CH; /*LAST CHAR READ*/
SYMBOL SYM; /*LAST SYMBOL READ*/
ALFA ID; /*LAST IDENTIFIER READ*/
int NUM; /*LAST NUMBER READ*/
int CC; /*CHARACTER COUNT*/
int LL; /*LINE LENGTH*/
int CX; /*CODE ALLOCATION INDEX*/
char LINE[81];
INSTRUCTION CODE[CXMAX];
ALFA KWORD[NORW+1];
SYMBOL WSYM[NORW+1];
SYMBOL SSYM[‘^‘+1];
ALFA MNEMONIC[9];
SYMSET DECLBEGSYS STATBEGSYS FACBEGSYS;
struct {
ALFA NAME;
objectS KIND;
union {
int VAL; /*CONSTANT*/
struct { int LEVELADRSIZE; } vp; /*VARIABLEPROCEDUR:*/
};
} TABLE[TXMAX];
FILE *FIN*FOUT;
int ERR;
void expression(SYMSET FSYS int LEV
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
- 编译原理与技术李文生:LR分析法C+
- C语言简化编译器前端 编译原理 LR1
评论
共有 条评论