资源简介
编译原理实验四--语法分析程序。参照TINY语言的语法分析程序,完成了对C-语言的语法分析
代码片段和文件信息
#include
#include
#include
#include
#define MAXRESERVED 6 //关键字最大程度
#define MAXTOKENLEN 40 //标识符最大长度
#define BUFLEN 256
#define TRUE 1
#define FALSE 0
static char lineBuf[BUFLEN]; /*读取一行字符保存 */
static int linepos = 0; /* 指示缓存中第几个字符 */
static int bufsize = 0; /* 当前缓存中字符串长度 */
static int EOF_flag = FALSE; /* 错误标识 */
/* allocate global variables */
int lineno = 0;
FILE * source; //读入文件
FILE * listing; //output file
//FILE * code;
/* allocate and set tracing flags */
int EchoSource = TRUE;
int TraceScan = TRUE;
int TraceParse = TRUE;
int TraceAnalyze = FALSE;
int TraceCode = FALSE;
int Error = FALSE;
static void syntaxError(char * message)
{
fprintf(listing“\n>>> “);
fprintf(listing“Syntax error at line %d: %s“linenomessage);
Error = TRUE;
}
typedef enum //枚举类型,保存词素类型
/* book-keeping tokens */
{ENDFILEERROR
/* reserved words */
IFELSEINTRETURNVOIDWHILE
/* multicharacter tokens */
IDNUM
/* special symbols */
LBRKRBRKLBRACERBRACEGTELTENEQEQASSIGNLTGTPLUSMINUSTIMESOVERLPARENRPARENSEMICOMMA
} TokenType;
static TokenType token; /* holds current token */
static struct //关键字字结构,方便查询
{ char* str;
TokenType tok;
} reservedWords[MAXRESERVED]
= {{“if“IF}{“int“INT}{“else“ELSE}{“return“RETURN}
{“void“VOID}{“while“WHILE}};
typedef enum //枚举类型,保存状态
{ STARTINRCOMINLCOMINCOMMENTINNUMINIDDONEINLTEINGTEINEEQINNEQ}
StateType;
char tokenString[MAXTOKENLEN+1]; //保存标识符
//节点类型
typedef enum {IntK IdK VoidK ConstK Var_DeclK Arry_DeclK FunK ParamsK
ParamK CompK Selection_StmtK Iteration_StmtK Return_StmtK AssignK OpK
Arry_ElemK CallK ArgsK UnkownK} NodeKind;
//表达式类型
typedef enum {VoidInteger} ExpType;
//const int max_child = 4;
//treeNode定义 包括子节点、兄弟节点、所处行号、节点类型、属性、表达式返回类型
typedef struct treeNode
{
struct treeNode * child[4];
struct treeNode * sibling;
int lineno;
NodeKind nodekind;
//union {StmtKind stmtExpT };
union { TokenType op; int val; const char * name;} attr;
ExpType type;
} TreeNode;
TreeNode * parse(void);
TreeNode * declaration_list(void);
TreeNode * declaration(void);
TreeNode * params(void);
TreeNode * param_list(TreeNode * k);
TreeNode * param(TreeNode * k);
TreeNode * compound_stmt(void);
TreeNode * local_declaration(void);
TreeNode * statement_list(void);
TreeNode * statement(void);
TreeNode * expression_stmt(void);
TreeNode * selection_stmt(void);
TreeNode * iteration_stmt(void);
TreeNode * return_stmt(void);
TreeNode * expression(void);
TreeNode * var(void);
TreeNode * simple_expression(TreeNode * k);
TreeNode * additive_expression(TreeNode * k);
TreeNode * term(TreeNode * k);
TreeNode * factor(TreeNode * k);
TreeNode * call(TreeNode * k);
TreeNode * args(void);
static int getNextChar(void)//获取缓存中下一个字符
{ if
- 上一篇:[编译原理实验]生成语法树,符号表,语义分析C++代码
- 下一篇:机房收费管理系统
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 语法分析c语言实现程序代码+实验报告
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 语法分析器 tiny语言语法分析
- C++语法分析器
- C-语言编译器可运行生成汇编代码
- 简单函数绘图语言的解释器
- 语法分析c语言实现含报告
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- LL1语法分析器(c++)
- 编译原理 课程设计 DAG 报告+源码C++版
评论
共有 条评论