资源简介
西安电子科技大学编译原理大作业,为简单的函数绘图语言编写一个解释器。该解释器接受用绘图语言编写的源程序,经过语法和语义分析后,直接将源程序所规定的图形显示在显示屏(或显示窗口)中。作业的目的是:通过自己动手编写解释器,掌握语言翻译,特别是语言识别的基本方法。
代码片段和文件信息
// ----------------------------- grammer.cpp ---------------------------------
// 语法分析器类的定义
#include “grammer.h“
// ------------------------ 通过词法分析器接口get_token获取一个记号-------
void grammer_class::fetch_token()
{
token = lexical.get_token () ;
if (token.type == ERRTOKEN) syntax_error(1);
}
// ------------------------ 匹配记号---------------------------
void grammer_class::match_token (enum token_type the_token)
{
if (token.type != the_token) syntax_error(2);
fetch_token();
}
// ------------------------ 语法错误处理--------------------------
void grammer_class::syntax_error (int case_of)
{
switch(case_of)
{ case 1: error_msg (lexical.line_no“ 非法记号 “ token.lexeme) ;
break;
case 2: error_msg (lexical.line_no token.lexeme “ 不是预期记号“) ;
break;
}
}
// ------------------------ 打印错误信息---------------
void grammer_class::error_msg(int line char *descrip char *string)
{
cout << “Line No “ << line << “: “ << descrip << string << endl;
lexical.close_lexical();
exit(1);
}
// ------------------------ 先序遍历并打印表达式的语法树----------
void grammer_class::print_syntax_tree(tree_node_ptr root int indent)
{
int temp;
for (temp=1; temp<=indent; temp++)
cout << “ “; // 缩进
switch(root->op_code) // 打印根节点
{ case PLUS: cout << “+“ << endl; break;
case MINUS: cout << “-“ << endl; break;
case MUL: cout << “*“ << endl; break;
case DIV: cout << “/“ << endl; break;
case POWER: cout << “**“ << endl; break;
case FUNC: cout << root->content.tag_func.math_func_ptr << endl; break;
case CONST_ID: cout <content.tag_const << endl; break;
case T: cout << “T“ << endl; break;
default: cout << “非法的树节点!“ << endl; exit(0);
}
if(root->op_code == CONST_ID || root->op_code == T)
return; // 叶子节点返回
if(root->op_code == FUNC) // 递归打印一个孩子的节点
print_syntax_tree(root->content.tag_func.childindent+1);
else // 递归打印两个孩子的节点
{
print_syntax_tree(root->content.tag_op.left indent+1);
print_syntax_tree(root->content.tag_op.right indent+1);
}
}
// ------------------------ 绘图语言解释器入口(与主程序的外部接口)-----------
void grammer_class::grammer(char * file_name)
{
enter(“grammer“);
if(!(lexical.init_lexical(file_name))) // 初始化词法分析器
{
cout << “打开文件错误 !“ << endl;
return;
}
fetch_token(); // 获取第一个记号
program(); // 递归下降分析
lexical.close_lexical(); // 关闭词法分析器
back(“grammer“);
return;
}
// ------------------------ program 的递归子程序---------------------
void grammer_class::program ()
{
enter(“program“);
while (token.type != NONTOKEN)
{ statement();
match_token(SEMICO) ;
}
back(“program“);
}
// ------------------------ statement 的递归子程序---------------------
void grammer_class::statement()
{
enter(“statement“);
switch (token.type)
{ case ORIGIN : origin_statement(); break;
case SCALE : scale_statement(); break;
case ROT : rot_statement(); break;
cas
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-05-20 09:57 HW\
目录 0 2020-05-20 09:58 HW\HW\
目录 0 2020-05-20 09:57 HW\HW\Gramma\
目录 0 2020-05-20 09:57 HW\HW\Gramma\Debug\
文件 589884 2019-12-19 09:41 HW\HW\Gramma\Debug\Gramma.exe
文件 833652 2019-12-19 09:41 HW\HW\Gramma\Debug\Gramma.ilk
文件 2042636 2019-12-18 19:35 HW\HW\Gramma\Debug\Gramma.pch
文件 1377280 2019-12-18 19:36 HW\HW\Gramma\Debug\Gramma.pdb
文件 186231 2018-12-07 10:01 HW\HW\Gramma\Debug\grammer.obj
文件 20390 2019-12-19 09:41 HW\HW\Gramma\Debug\grammermain.obj
文件 23657 2018-12-07 10:01 HW\HW\Gramma\Debug\lexical.obj
文件 186026 2018-11-22 22:18 HW\HW\Gramma\Debug\parser.obj
文件 20900 2018-11-29 21:41 HW\HW\Gramma\Debug\parsermain.obj
文件 23579 2018-11-22 22:18 HW\HW\Gramma\Debug\scanner.obj
文件 140288 2019-12-19 09:41 HW\HW\Gramma\Debug\vc60.idb
文件 110592 2019-12-18 19:35 HW\HW\Gramma\Debug\vc60.pdb
文件 4232 2018-12-02 21:55 HW\HW\Gramma\Gramma.dsp
文件 520 2018-11-22 22:09 HW\HW\Gramma\Gramma.dsw
文件 66560 2019-12-19 09:43 HW\HW\Gramma\Gramma.ncb
文件 49664 2019-12-19 09:43 HW\HW\Gramma\Gramma.opt
文件 801 2019-12-19 09:41 HW\HW\Gramma\Gramma.plg
文件 10106 2018-12-07 10:01 HW\HW\Gramma\grammer.cpp
文件 2476 2018-12-07 10:01 HW\HW\Gramma\grammer.h
文件 248 2018-12-07 11:14 HW\HW\Gramma\grammermain.cpp
文件 4358 2018-12-07 10:01 HW\HW\Gramma\lexical.cpp
文件 2571 2018-12-07 10:01 HW\HW\Gramma\lexical.h
文件 191 2018-11-22 17:20 HW\HW\Gramma\test.txt
文件 329 2018-11-22 21:58 HW\HW\Gramma\test1.txt
文件 254 2018-11-29 21:24 HW\HW\Gramma\test2.txt
文件 162 2018-12-07 09:33 HW\HW\Gramma\test6.txt
目录 0 2020-05-20 09:57 HW\HW\Lexical\
............此处省略57个文件信息
- 上一篇:IEC61850测试工具
- 下一篇:数字和字母训练集
相关资源
- 非常好的编译原理教程
- 编译原理与技术第二版
- 编译原理视频1-12讲
- 编译原理三大圣经——龙书虎书鲸书
- 编译系统透视-图解编译原理-新设计团
- 编译器源代码
- 山东大学编译原理pl0实验.rar
- 编译原理中间代码生成实验报告——
- 编译原理第2版test语言 词法语法语义
- 编译原理 龙书 虎书 鲸书 全.rar
- 编译原理程序小集正则表达式 NFA DF
- 编译原理实验报告 熟悉算术表达式的
- 编译原理_第2版.7z
- 《编译原理》课后习题答案
- 编译原理词法语法语义分析程序设计
- 算符优先语法分析程序
- PL0编译器源程序分析
- 编译原理实验报告分析PL0词法分析程
- 编译原理课程设计布尔表达式的语法
- 编译原理课设——最终课设
- 天津大学编译原理资料.zip
- 《编译原理》第二版高清带书签
- 龙书虎书鲸书 编译原理 中文版
- 编译原理23-30
- 编译原理与技术第二版高清pdf含目录
- 编译原理,语法分析,词法分析器,
- 编译原理实验报告语法分析 递归下降
- 哈工大编译原理大作业
- 两周自制脚本语言_PDF电子书 带书签目
- 编译原理及编译程序构造第二版东南
评论
共有 条评论