freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于gui的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn)畢業(yè)論文-資料下載頁

2025-08-19 19:18本頁面

【導(dǎo)讀】詞法分析器、語法分析器、中間代碼生成器均是采用C++語言手動書寫完成,未采用自動生成器,GUI采用Win32API實現(xiàn)以保證輕快的運行速度及良好的系統(tǒng)性能,編輯控件采用Scintilla。詞法分析器采用確定有限自動機實現(xiàn),語法分析器是一個遞歸。下降分析器,中間代碼生成器輸出的中間代碼以四元式形式表示。XP、Windows7或更高版本。本設(shè)計提供了一個可工作的界面友好的編譯器前端,可以

  

【正文】 過函數(shù) ParseId()將其解析為一個變量,如果不能成功則通過函數(shù) ParseFunctionCall()將其解析為函數(shù)調(diào)用。 函數(shù) NextToken()從詞法分析器獲得下一個 token;函數(shù) Match()匹配 token 并獲取下一個 token,如果有錯誤,則生成錯誤信息。 語法分析器在解析的過程中,通過函數(shù) Emit()生成四元式。 變量 offset_記錄局部變量的相對偏移量;變量 temp_counter_和 label_counter_記錄臨時變量和標記的計數(shù);變量 current_token_記錄當(dāng)前正在解析的 token。 class Parser { public: Parser(Lexer* lexer, IntermediateInstrsList* interm_list, std::vectorMessage* errors_list)。 ~Parser()。 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 27 void Parse()。 private: void NextToken()。 bool MatchIf(TokenTag tag)。 void Match(TokenTag tag)。 void Match(TokenTag tags[], int n, const std::stringamp。 msg)。 void Emit(IntermediateInstr* instr)。 void EmitLabel(const std::stringamp。 label)。 void EmitLabel(LabelOperand* label)。 unsigned int GetStackSize()。 LabelOperand* NewLabel()。 VariableOperand* NewTemp(DataType type = INT_TYPE, bool is_array = false, unsigned int elems = 1)。 void ParseFunctions()。 void ParseBlock(FunctionSymbol* func_symbol = NULL)。 void ParseDeclarations()。 void ParseInitialization(const std::stringamp。 var_id)。 void ParseStatements()。 void ParseStatement()。 void ParseAssignment(Operand* lhs_operand = NULL)。 Operand* ParseBool()。 Operand* ParseAnd()。 Operand* ParseEquality()。 Operand* ParseRel()。 Operand* ParseExpr()。 Operand* ParseTerm()。 Operand* ParseFactor()。 Operand* ParseId(bool allow_func)。 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 28 Operand* ParseFunctionCall(const std::stringamp。 func_id)。 std::vectorOperand** ParseArgumentsList()。 private: unsigned int temp_counter_。 // 臨時變量計數(shù)。 unsigned int offset_。 // 變量相對地址。 unsigned int label_counter_。 // 標號計數(shù)。 Lexer* lexer_。 // 指向詞法分析器。 std::stackLabelOperand* break_stack_。 // 用于 break。 std::stackLabelOperand* continue_stack_。 // 用于 continue。 SymbolTable* current_scope_table_。 // 當(dāng)前作用域符號表。 SymbolTable* root_symbol_table_。 // 根符號表 FunctionSymbol* current_function_。 // 指向當(dāng)前函數(shù)。 Token current_token_。 // 當(dāng)前詞法單元。 }。 中間代碼生成器 中間代碼的四元式表示由類 IntermediateInstr 實現(xiàn),該類包含四個數(shù)據(jù)成員,operation_表示運算符, operand1_、 operand2_、 operand3_表示兩個操作數(shù)和結(jié)果。 IntermediateOp 是一個枚舉類型。 針對常見結(jié)構(gòu),按照 節(jié)中的原理進行翻譯。 class IntermediateInstr { public: IntermediateInstr(IntermediateOp op, Operand* operand1 = NULL, Operand* operand2 = NULL, Operand* operand3 = NULL) : operation_(op), operand1_(operand1), operand2_(operand2), operand3_(operand3) {} IntermediateOp operation() { return operation_。 } Operand* operand1() { return operand1_。 } 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 29 Operand* operand2() { return operand2_。 } Operand* operand3() { return operand3_。 } std::string ToString()。 private: IntermediateOp operation_。 // 操作符。 Operand* operand1_。 // 操作數(shù) 。 Operand* operand2_。 // 操作數(shù)。 Operand* operand3_。 // 操作數(shù)。 }。 枚舉類型 IntermediateOP 存儲跟四元式中運算符相關(guān)的信息。 enum IntermediateOp { ASSIGN_OP = (int)39。=39。, ADD_OP = (int)39。+39。, SUBTRACT_OP = (int)39。39。, MULTIPLY_OP = (int)39。*39。, DIVIDE_OP = (int)39。/39。, NOT_OP = (int)39。!39。, DIV_REMINDER_OP = (int)39。%39。, LESS_THAN_OP = (int)39。39。, GREATER_THAN_OP = (int)39。39。, LESS_OR_EQUAL_OP = 400, GREATER_OR_EQUAL_OP = 401, EQUAL_EQUAL_OP = 402, NOT_EQUAL_OP = 403, OR_OP = 404, AND_OP = 405, IF_OP, GOTO_OP, 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 30 LABEL_OP, INC_STACK_PTR_OP, DEC_STACK_PTR_OP, PARAM_OP, ENTER_OP, CALL_OP, RETURN_OP, PRINT_INT_OP, PRINT_STR_OP, PRINT_CHAR_OP, READ_INT_OP, READ_STR_OP }。 GUI 本設(shè)計實現(xiàn)的圖形界面包含菜單欄、標簽欄及編輯框。 菜單欄包含“ File”、“ Edit”、“ View”、“ Tool”、“ About”。如圖 所示。 標簽欄支持多標簽,當(dāng)前編輯的標簽上方會有黃色線條顯示。編輯框支持顯示行號,可在視圖“ View”菜單中選中“ Line Number Margin”進行顯示。 圖 菜單欄 菜單“ File”包含的菜單項有“ New”、“ Open”、“ Close”、“ Close All”、“ Save”、“ Save All”、“ Save As”、“ Exit”。如果 所示。 “ New”:新建文件; “ Open”:打開文件; “ Close”:關(guān)閉文件; 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 31 “ Close All”:關(guān)閉所有當(dāng)前打開的文件; “ Save”:保存文件; “ Save All”:保存所有當(dāng)前打開的文件; “ Save As”:將當(dāng)前文件另存為; “ Exit”:退出 Front_end。 圖 菜單 File 菜單“ Edit”包含的菜單項有“ Undo”、“ Redo”、“ Cut”、“ Copy”、“ Paste”、“ Delete”、“ Select All”、“ Find… ”、“ Find Next”、“ Replace”。 如圖 所示 “ Undo”:撤銷; “ Redo”:恢復(fù); “ Cut”:剪切; “ Copy”:復(fù)制; “ Paste”:粘貼; “ Delete”:刪除當(dāng)前所選區(qū)域; “ Select All”:全選; “ Find… ”:點擊顯示查找對話框,如圖 所示;查找的時候,可以選擇匹配整個單詞、匹配大小寫、匹配正則表達式、循環(huán)匹配,查找方向可為上或下。 “ Find Next”:查找下一個; “ Replace”:點擊顯示替換對話框,如圖 所示。替換時可以選擇替換當(dāng)前匹配的單詞,也可以選擇替換所有匹配的單詞。匹配時要進行查找,此處查找功能與“ Find… ”相同,同樣可以選擇匹配整個單詞、匹配大小寫、匹配正則表達式、循環(huán)匹配,查找方向可為上或下。 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 32 圖 菜單 Edit 圖 查找對話框 圖 替換對話框 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 33 菜單“ View”包含的菜單項有“ Line Number Margin”、“ Zoom in”、“ Zoom out”。如圖 所示?!?Line Number Margin 實現(xiàn)顯示行號功能”;“ Zoom in”和“ Zoom out”實現(xiàn)放大縮小功能。 圖 菜單 View 菜單“ Tool”包含的菜單項有“ Translate”。如圖 所示。點擊“ Translate”將源代碼轉(zhuǎn)換成中間代碼。 圖 菜單 Tool 點擊菜單“ About”,會彈出關(guān)于對話框。如圖 所示。 圖 關(guān)于對話框 本設(shè)計的圖形界面通過類 FrontEnd 實現(xiàn)。 class FrontEnd : public Window { public: FrontEnd():Window(), _mainWindowStatus(0), _pMainSplitter(NULL), _hTabPopupMenu(NULL), _pEditView(NULL), _pDocTab(NULL){}。 基于 GUI 的交互式編譯系統(tǒng)之中間代碼生成器的設(shè)計與實現(xiàn) 34 void init(HINSTANCE, HWND, const char *)。 virtual ~FrontEnd()。 void killAllChildren()。 virtual void destroy()。 static const char * getClassName()。 void setTitle(const char *title) const。 void setTitleWith(const char *filePath)。 bool isDlgMsg(MSG *msg) const。 bool doOpen(const char *fileName)。 private: static const char _className[32]。 Window *_pMainWindow。 unsigned char _mainWindowStatus。 DocTabView _mainDocTab。 DocTabView _subDocTab。 DocTabView *_pDocTab。 ScintillaEditView _mainEditView。 ScintillaEditView _subEditView。 ScintillaEditView *_pEditView。 SplitterContainer *_pMainSplitter。 SplitterContainer _subS
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1