资源简介
简单函数绘图语言的解释器
实现简单函数绘图的语句
循环绘图(FOR-DRAW)
比例设置(SCALE)
角度旋转(ROT)
坐标平移(ORIGIN)
注释 (-- 或 //)
屏幕(窗口)的坐标系
左上角为原点
x方向从左向右增长
y方向从上到下增长(与一般的坐标系方向相反)
代码片段和文件信息
#include“parser.h“
#include“semantic.h“
#define Tree_trace(x) PrintSyntaxTree(x1);
#pragma warning(disable: 4996)
#pragma warning(disable: 4703)
double Parameter = 0
Origin_x = 0 Origin_y = 0
Scale_x = 1 Scale_y = 1
Rot_angle = 0;
static Token token;//定义一个记号
//辅助函数声明
static void FetchToken();//调用词法分析器的GetToken,把得到的当前记录保存起来。如果得到的记号是非法输入errtoken,则指出一个语法错误
static void MatchToken(enum Token_Type The_Token);//匹配当前记号
static void SyntaxError(int case_of);//处理语法错误的子程序。根据错误的性质打印相关信息并且终止程序运行。错误性质可以根据传参不同来区分:SyntaxError(1)词法错 SyntaxError(2)语法错
static void ErrMsg(unsigned LineNo char *descrip char *string);//打印错误信息
static void PrintSyntaxTree(struct ExprNode *root int indent);//先序遍历打印语法树
//非终结符递归子程序声明 有2类
//第1类,语法分析,不构造语法树,因此语句的子程序均设计为过程->void类型的函数,非终结符的递归子程序声明
static void Program();//程序
static void Statement();//语句
static void OriginStatement();//Origin语句
static void RotStatement();//Rot语句
static void ScaleStatement();//Scale语句
static void ForStatement();//For语句
//第2类,语法分析+构造语法树,因此表达式均设计为返回值为指向语法树节点的指针的函数。
static struct ExprNode *expression();//表达式、二元加减运算表达式
static struct ExprNode *Term();//乘除运算表达式
static struct ExprNode *Factor();//一元加减运算表达式
//把项和因子独立开处理解决了加减号与乘除号的优先级问题。在这几个过程的反复调用中,始终传递fsys变量的值,保证可以在出错的情况下跳过出错的符号,使分析过程得以进行下去。
static struct ExprNode *Component();//幂运算表达式
static struct ExprNode *Atom();//原子表达式
//对外接口声明
extern void Parser(char *SrcFilePtr);
//语法树构造函数声明
static struct ExprNode *MakeExprNode(enum Token_Type opcode ...);
//通过词法分析器接口GetToken获得一个记号
static void FetchToken()
{
token = GetToken();
if (token.type == ERRTOKEN) SyntaxError(1); //如果得到的记号是非法输入errtoken,则指出一个语法错误
}
//匹配当前记号
static void MatchToken(enum Token_Type The_Token)
{
if (token.type != The_Token)
{
SyntaxError(2);//若失败,指出语法错误
}
FetchToken();//若成功,获取下一个
}
//语法错误处理
static void SyntaxError(int case_of)
{
switch (case_of)
{
case 1: ErrMsg(LineNo (char*)“错误记号 “ token.lexeme);
break;
case 2: ErrMsg(LineNo (char*)“不是预期记号“ token.lexeme);
break;
}
}
//打印错误信息
void ErrMsg(unsigned LineNo char *descrip char *string)
{
char msg[256];
memset(msg 0 256);
sprintf(msg “Line No %5d:%s %s !“ LineNo descrip string);
MessageBoxA(NULL msg “error!“ MB_OK);
CloseScanner();
exit(1);
}
//先序遍历打印语法树,根-左-右
void PrintSyntaxTree(struct ExprNode *root int indent)
{
int temp;
for (temp = 1; temp <= indent; temp++) printf(“\t“);//缩进
switch (root->OpCode)
{
case PLUS: printf(“%s\n“ “+“); break;
case MINUS: printf(“%s\n“ “-“); break;
case MUL: printf(“%s\n“ “*“); break;
case DIV: printf(“%s\n“ “/“); break;
case POWER: printf(“%s\n“ “**“); break;
case FUNC: printf(“%x\n“ root->Content.CaseFunc.MathFuncPtr); break;
case CONST_ID: printf(“%f\n“ root->Content.CaseConst); break;
case T: printf(“%s\n“ “T“); break;
default: pri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-05 17:54 Compile\
目录 0 2018-12-05 09:40 Compile\.vs\
目录 0 2018-12-05 09:40 Compile\.vs\Compile\
目录 0 2018-12-07 18:16 Compile\.vs\Compile\v15\
文件 49152 2018-12-07 18:16 Compile\.vs\Compile\v15\.suo
文件 34123776 2018-12-07 18:16 Compile\.vs\Compile\v15\Browse.VC.db
目录 0 2018-12-05 17:54 Compile\.vs\Compile\v15\ipch\
文件 327680 2018-12-05 09:42 Compile\.vs\Compile\v15\ipch\176691f01abecd6.ipch
文件 47579136 2018-12-05 17:54 Compile\.vs\Compile\v15\ipch\64c7c1b4014d5df3.ipch
目录 0 2018-12-07 12:46 Compile\.vs\Compile\v15\ipch\AutoPCH\
目录 0 2018-12-05 20:03 Compile\.vs\Compile\v15\ipch\AutoPCH\513d0bb9ebe6f03c\
文件 4784128 2018-12-07 09:15 Compile\.vs\Compile\v15\ipch\AutoPCH\513d0bb9ebe6f03c\SCANNER.ipch
目录 0 2018-12-07 18:14 Compile\.vs\Compile\v15\ipch\AutoPCH\5338a8ff6f90f8ac\
文件 4718592 2018-12-07 18:14 Compile\.vs\Compile\v15\ipch\AutoPCH\5338a8ff6f90f8ac\SCANNERMAIN.ipch
目录 0 2018-12-07 12:43 Compile\.vs\Compile\v15\ipch\AutoPCH\5b8d75911e5f3340\
文件 46858240 2018-12-07 12:44 Compile\.vs\Compile\v15\ipch\AutoPCH\5b8d75911e5f3340\SEMANTIC.ipch
目录 0 2018-12-07 12:46 Compile\.vs\Compile\v15\ipch\AutoPCH\94d0645a6e76bdbf\
文件 4784128 2018-12-07 12:46 Compile\.vs\Compile\v15\ipch\AutoPCH\94d0645a6e76bdbf\SCANNERMAIN.ipch
目录 0 2018-12-07 18:11 Compile\.vs\Compile\v15\ipch\AutoPCH\aeecd457cf75ae9b\
文件 43384832 2018-12-07 18:11 Compile\.vs\Compile\v15\ipch\AutoPCH\aeecd457cf75ae9b\SEMANTIC.ipch
目录 0 2018-12-07 13:05 Compile\.vs\Compile\v15\ipch\AutoPCH\b84627d9cd402ffd\
文件 3080192 2018-12-07 18:15 Compile\.vs\Compile\v15\ipch\AutoPCH\b84627d9cd402ffd\PARSERMAIN.ipch
目录 0 2018-12-07 12:45 Compile\.vs\Compile\v15\ipch\AutoPCH\ba6f68bbfdccccf5\
文件 46792704 2018-12-07 12:45 Compile\.vs\Compile\v15\ipch\AutoPCH\ba6f68bbfdccccf5\PARSER.ipch
目录 0 2018-12-05 17:54 Compile\.vs\Compile\v15\ipch\AutoPCH\c10aa0c28a1fd09b\
文件 47579136 2018-12-05 18:00 Compile\.vs\Compile\v15\ipch\AutoPCH\c10aa0c28a1fd09b\COMPILE.ipch
目录 0 2018-12-07 12:50 Compile\.vs\Compile\v15\ipch\AutoPCH\c671325d591e2f9e\
文件 43384832 2018-12-07 12:50 Compile\.vs\Compile\v15\ipch\AutoPCH\c671325d591e2f9e\PARSER.ipch
目录 0 2018-12-07 18:12 Compile\.vs\Compile\v15\ipch\AutoPCH\d043dcb2cb75386f\
文件 4718592 2018-12-07 18:12 Compile\.vs\Compile\v15\ipch\AutoPCH\d043dcb2cb75386f\SCANNER.ipch
目录 0 2018-12-05 17:54 Compile\.vs\Compile\v15\ipch\AutoPCH\ead4cfed584249b8\
............此处省略75个文件信息
- 上一篇:信息学奥赛一本通C++版配套光盘第五版.rar
- 下一篇:LL1语法分析程序设计
相关资源
- C++大作业4种排序算法演示.docx
- 编译原理大作业.zip
- C++课程设计教务管理系统.zip
- 算法分析与设计 期末大作业.doc
- 编译原理大作业递归下降法
- 编译原理大作业完整的词法分析器
- 北航数值分析大作业一
- C语言编译器289297
- c语言期末大作业,控制台实现图书馆
- c++大作业社团管理系统
- MFC写的画图板类似Windows自带的画图
- C语言ATM机
- C语言大作业-班费收支管理系统
- VC++MFC制作的画图工具
- C语言版文件相似度对比,文本对比,
- 计算机图形学大作业C++代码MFC终极版
- mfc实现画图板源码+实验报告
- C++大作业之员工管理系统
- 数据结构大作业(C语言)实验报告
- 西北工业大学C++语言大作业实验报告
- C++画数学函数图象
- 用MFC画直线椭圆矩型可选择线条颜色
- c语言实验贪吃蛇游戏大作业和实验报
- 酒店房间登记与计费管理系统
- 数据结构大作业航空客运订票系统
- C语言经典程序设计源代码之画图软件
- C++简单的画图程序源代码
- Qt编写的画图小程序c++语言
- teeChart快速画图mfcvs2010
- C语言大作业 西北工业大学
评论
共有 条评论