• 大小: 96.2MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-03-10
  • 语言: C/C++
  • 标签: 大作业  画图程序  

资源简介

简单函数绘图语言的解释器 实现简单函数绘图的语句 循环绘图(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个文件信息

评论

共有 条评论