資源簡介
簡單函數繪圖語言的解釋器
實現簡單函數繪圖的語句
循環繪圖(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語法分析程序設計
評論
共有 條評論