資源簡介
簡單函數(shù)繪圖語言的解釋器,某電編譯原理大作業(yè),此代碼測試環(huán)境為vc6,親測完美運行。

代碼片段和文件信息
//?-----------------------------?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?“?< 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) //?打印根節(jié)點
{ case?PLUS:??????cout?<“+“?< case?MINUS:?????cout?<“-“?< case?MUL:???????cout?<“*“?< case?DIV:???????cout?<“/“?< case?POWER:?????cout?<“**“?< case?FUNC:??????cout?<content.tag_func.math_func_ptr?< case?CONST_ID:??cout?<content.tag_const?< case?T:?????????cout?<“T“?< default:????????cout?<“非法的樹節(jié)點!“?< }
if(root->op_code?==?CONST_ID?||?root->op_code?==?T)?
return; //?葉子節(jié)點返回
if(root->op_code?==?FUNC) //?遞歸打印一個孩子的節(jié)點
print_syntax_tree(root->content.tag_func.childindent+1);
else //?遞歸打印兩個孩子的節(jié)點
{
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?<“打開文件錯誤?!“?< 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??2018-12-07?15:53??Gramma\Debug\
?????文件??????589915??2018-12-07?15:53??Gramma\Debug\Gramma.exe
?????文件??????843108??2018-12-07?15:53??Gramma\Debug\Gramma.ilk
?????文件?????2018004??2018-12-07?10:01??Gramma\Debug\Gramma.pch
?????文件?????1377280??2018-12-07?15:53??Gramma\Debug\Gramma.pdb
?????文件??????186231??2018-12-07?10:01??Gramma\Debug\grammer.obj
?????文件???????20679??2018-12-07?15:53??Gramma\Debug\grammermain.obj
?????文件???????23657??2018-12-07?10:01??Gramma\Debug\lexical.obj
?????文件??????186026??2018-11-22?22:18??Gramma\Debug\parser.obj
?????文件???????20900??2018-11-29?21:41??Gramma\Debug\parsermain.obj
?????文件???????23579??2018-11-22?22:18??Gramma\Debug\scanner.obj
?????文件??????107520??2018-12-07?16:03??Gramma\Debug\vc60.idb
?????文件??????110592??2018-12-07?15:53??Gramma\Debug\vc60.pdb
?????文件????????4232??2018-12-02?21:55??Gramma\Gramma.dsp
?????文件?????????520??2018-11-22?22:09??Gramma\Gramma.dsw
?????文件???????66560??2018-12-07?16:36??Gramma\Gramma.ncb
?????文件???????49664??2018-12-07?16:36??Gramma\Gramma.opt
?????文件????????1362??2018-12-07?15:53??Gramma\Gramma.plg
?????文件???????10106??2018-12-07?10:01??Gramma\grammer.cpp
?????文件????????2476??2018-12-07?10:01??Gramma\grammer.h
?????文件?????????248??2018-12-07?11:14??Gramma\grammermain.cpp
?????文件????????4358??2018-12-07?10:01??Gramma\lexical.cpp
?????文件????????2571??2018-12-07?10:01??Gramma\lexical.h
?????文件?????????191??2018-11-22?17:20??Gramma\test.txt
?????文件?????????329??2018-11-22?21:58??Gramma\test1.txt
?????文件?????????254??2018-11-29?21:24??Gramma\test2.txt
?????文件?????????162??2018-12-07?09:33??Gramma\test6.txt
?????目錄???????????0??2018-12-07?09:31??Lexical\Debug\
?????文件??????303197??2018-12-07?09:31??Lexical\Debug\Lexical.exe
?????文件??????511544??2018-12-07?09:31??Lexical\Debug\Lexical.ilk
?????文件???????23539??2018-12-06?17:13??Lexical\Debug\lexical.obj
............此處省略50個文件信息
- 上一篇:MFC C++英漢詞典
- 下一篇:epson 熱敏打印機 打印 源碼
評論
共有 條評論