云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C-Minus词法分析和语法分析设计编译器编译原理课程设计

C-Minus词法分析和语法分析设计编译器编译原理课程设计

  • 62 次阅读
  • 3 次下载
  • 2026/4/27 14:58:25

符号表文件获取终结符和非终结符构造文法分析表分析句型句子输出结果 2.1.3 各文件或函数的设计说明

语法分析程序包括:parser.cpp,parser.h ? parser.cpp:

Parser :: Parser()//界面设计

Token Parser :: getToken()//获取scanner中保存在TokenList数组中的Token,并且每次获取完之后数组下标指向下一个

void Parser :: syntaxError(string s)//出错处理 void Parser :: match(TokenType ex)//匹配出错 TreeNode * Parser :: declaration(void)//类型匹配错误

TreeNode * Parser :: param_list(TreeNode * k)//k可能是已经被取出来的VoidK,但又不是(void)类型的参数列表,所以一直传到param中去,作为其一个子节点 ? parse.h:对parse.c的函数声明

//19种节点类型,分别表示int、id、void、数值、变量声明、数组声明、函数声明、函数声明参数列表、函数声明参数、复合语句体、if、while、return、赋值、运算、数组元素、函数调用、函数调用参数列表、未知节点

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 {Void,Integer} ExpType;

ofstream fout_Tree(\输出语法树到文件

//treeNode定义 包括子节点、兄弟节点、所处行号、节点类型、属性、表达式返回类型 typedef struct treeNode

TreeNode * newNode(Nodekind k);//根据节点类型新建节点

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); 2.1.4 测试程序说明

根据附录A后面的例子,程序输入两个整数,计算并打印出它们的最大公因子,保存为a.txt。

/* A program to perform Eucild's

Algorithm to compute gcd. */ int gcd (int u, int v) {

if (v==0) return u; else return

gcd(v,u-u/v*v); /* u-u/v*v== u mod v */ }

void main(void) { int x; int y; x=input(); y=input(); output(gcd(x,y)); }

3. 程序代码实现

按文件列出主要程序代码, 添加必要的注释.

Scanner.cpp:

#include #include #include #include #include \#include using namespace std; /*

Name: 词法分析器 Copyright: Author: XXX Date: 19-05-14 12:00 Description: 提取出token */

Scanner :: Scanner() {

scanSuccess = true; charIndex = 0; str = \

commentFlag = true; sourseString = \ lineCount = 0; }

void Scanner :: scan() {

cout<<\开始词法分析...\ bool doubleSym = false; int state = START; lineCount = 0; char ch; while(state<6) {

if(START==state)//初始状态和空格 {

state = charType(ch); if(state!=START) ch = getNextChar(); if('\\0'==ch) { }

Token t;

t.lineNo = lineCount; t.tokenString = \t.tokenType = ENDFILE; tokenList.push_back(t); break;

getSourseStringFromFile(\

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

符号表文件获取终结符和非终结符构造文法分析表分析句型句子输出结果 2.1.3 各文件或函数的设计说明 语法分析程序包括:parser.cpp,parser.h ? parser.cpp: Parser :: Parser()//界面设计 Token Parser :: getToken()//获取scanner中保存在TokenList数组中的Token,并且每次获取完之后数组下标指向下一个 void Parser :: syntaxError(string s)//出错处理 void Parser :: match(TokenType ex)//匹配出错 TreeNode * Parser :: declaration(void)//类型匹配错误 TreeNode * Parser :

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com