亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zasm.cpp

?? 自己開發的匯編式腳本語言編譯器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*

    文件
        
        ZAsm.cpp

    內容
        
        匯編編譯器實現

    日期

        12.9.2008

    作者
        
        張錦

*/

#ifndef _DATASTRUCTS_H_
#define _DATASTRUCTS_H_

// ---- 文件包含 -----------------------------------------------------------------------------

    #include <iostream>
    #include <iomanip>
    using namespace std;

// ---- 全局常量 -----------------------------------------------------------------------------

    // ---- 文件名 ---------------------------------------------------------------------------
    
        #define MAX_FILENAME_SIZE       2048    // 文件名最大字符數
        
        #define SOURCE_FILE_EXT         ".ZASM" // 源代碼文件擴展名
        #define EXEC_FILE_EXT           ".ZSE"  // 可執行文件擴展名

    // ---- 源代碼 ---------------------------------------------------------------------------

        #define MAX_SOURCE_CODE_SIZE    65536   // 源代碼最大行數
        #define MAX_SOURCE_LINE_SIZE    4096    // 源代碼行最大字符數

    // ---- ZSE 文件頭 -----------------------------------------------------------------------

        #define ZSE_ID_STRING           "ZSE0"      // ZSE 文件標識

        #define VERSION_MAJOR           0           // 主版本號
        #define VERSION_MINOR           0           // 副版本號

    // ---- 指令查找表 -----------------------------------------------------------------------

        #define MAX_INSTR_MNEMONIC_SIZE 16      // 指令助記符字符串的最大長度
        #define MAX_INSTR_LOOKUP_COUNT  256     // 指令查找表存儲的指令的最大個數

        // ---- 指令操作碼 -------------------------------------------------------------------

            #define INSTR_MOV               0

            #define INSTR_ADD               1
            #define INSTR_SUB               2
            #define INSTR_MUL               3
            #define INSTR_DIV               4
            #define INSTR_MOD               5   
            #define INSTR_EXP               6
            #define INSTR_NEG               7
            #define INSTR_INC               8
            #define INSTR_DEC               9

            #define INSTR_AND               10
            #define INSTR_OR                11
            #define INSTR_XOR               12
            #define INSTR_NOT               13
            #define INSTR_SHL               14
            #define INSTR_SHR               15

            #define INSTR_CONCAT            16
            #define INSTR_GETCHAR           17
            #define INSTR_SETCHAR           18

            #define INSTR_JMP               19
            #define INSTR_JE                20
            #define INSTR_JNE               21
            #define INSTR_JG                22
            #define INSTR_JL                23
            #define INSTR_JGE               24
            #define INSTR_JLE               25
        
            #define INSTR_PUSH              26
            #define INSTR_POP               27

            #define INSTR_CALL              28
            #define INSTR_RET               29
            #define INSTR_CALLHOST          30

            #define INSTR_PAUSE             31
            #define INSTR_EXIT              32
        
        // ---- 操作數類型位域掩碼 -----------------------------------------------------------

            #define OP_FLAG_TYPE_INT        1       // 整形字面值
            #define OP_FLAG_TYPE_FLOAT      2       // 浮點型字面值
            #define OP_FLAG_TYPE_STRING     4       // 字符串型字面值
            #define OP_FLAG_TYPE_MEM_REF    8       // 內存引用
            #define OP_FLAG_TYPE_LINE_LABEL 16      // 行標簽
            #define OP_FLAG_TYPE_FUNC_NAME  32      // 函數名(用于call指令)
            #define OP_FLAG_TYPE_REG        128     // 一個寄存器,即_RetVal
            #define OP_FLAG_TYPE_HOST_API_CALL 64   // 主應用程序API調用(用于CallHost指令中)

    // ---- 匯編指令流 -----------------------------------------------------------------------

        #define OP_TYPE_INT                 0       // 整形操作數
        #define OP_TYPE_FLOAT               1       // 浮點型操作數
        #define OP_TYPE_STRING_INDEX        2       // 字符串索引操作數
        #define OP_TYPE_ABS_STACK_INDEX     3       // 絕對堆棧索引操作數
        #define OP_TYPE_REL_STACK_INDEX     4       // 相對堆棧索引操作數
        #define OP_TYPE_INSTR_INDEX         5       // 指令索引
        #define OP_TYPE_FUNC_INDEX          6       // 函數索引
        #define OP_TYPE_HOST_API_CALL_INDEX 7       // 主程序 API 調用索引
        #define OP_TYPE_REG                 8       // 寄存器

    // ---- 詞法分析 -------------------------------------------------------------------------

        #define MAX_LEXEME_SIZE             256     // 詞位最大長度

        #define LEX_STATE_NO_STRING         0       // 詞法分析按一般狀態掃描
        #define LEX_STATE_IN_STRING         1       // 詞法分析按字符串模式掃描
        #define LEX_STATE_END_STRING        2       // 詞法分析按一般狀態掃描,
                                                    // 并且下一狀態為NO_STRING
    
        #define TOKEN_TYPE_INT              0       // 整形字面值
        #define TOKEN_TYPE_FLOAT            1       // 浮點型字面值
        #define TOKEN_TYPE_STRING           2       // 字符串型字面值
        #define TOKEN_TYPE_QUOTE            3       // 雙引號
        #define TOKEN_TYPE_IDENT            4       // 標識符
        #define TOKEN_TYPE_COLON            5       // 冒號
        #define TOKEN_TYPE_OPEN_BRACKET     6       // 左中括號
        #define TOKEN_TYPE_CLOSE_BRACKET    7       // 右中括號
        #define TOKEN_TYPE_COMMA            8       // 逗號
        #define TOKEN_TYPE_OPEN_BRACE       9       // 左大括號
        #define TOKEN_TYPE_CLOSE_BRACE      10      // 右大括號
        #define TOKEN_TYPE_NEWLINE          11      // 換行

        #define TOKEN_TYPE_INSTR            12      // 指令

        #define TOKEN_TYPE_SETSTACKSIZE     13      // SetStackSize指示符
        #define TOKEN_TYPE_VAR              14      // Var指示符
        #define TOKEN_TYPE_FUNC             15      // Func指示符
        #define TOKEN_TYPE_PARAM            16      // Param指示符
        #define TOKEN_TYPE_REG_RETVAL       17      // _RetVal寄存器

        #define TOKEN_TYPE_INVALID          18      // 不符合屬性字的錯誤編碼
        #define END_OF_TOKEN_STREAM         19      // 到達屬性字流的尾部

        #define MAX_IDENT_SIZE              256     // 標識符最大長度
    
    // ---- 函數 -----------------------------------------------------------------------------

        #define MAIN_FUNC_NAME  "_MAIN"

    // ---- 出錯處理 -------------------------------------------------------------------------

        #define ERROR_MSG_LOCAL_SETSTACKSIZE  \
            "堆棧大小指示符 SetStackSize 只能出現在全局作用域。"

        #define ERROR_MSG_MULTIPLE_SETSTACKSIZE  \
            "堆棧大小指示符 SetStackSize 只能出現一次。"

        #define ERROR_MSG_INVALID_STACK_SIZE  \
            "堆棧大小不正確,SetStackSize 后面應跟一個整數。"
    
        #define ERROR_MSG_NESTED_FUNC  \
            "Func 標簽不能出現在函數內部。"

        #define ERROR_MSG_IDENT_EXPECTED  \
            "此處需要標識符。"

        #define ERROR_MSG_FUNC_REDEFINITION  \
            "函數重復定義。"

        #define ERROR_MSG_IDENT_REDEFINITION  \
            "標識符重復定義。"
    
        #define ERROR_MSG_INVALID_ARRAY_SIZE  \
            "數組大小不合法。"

        #define ERROR_MSG_INVALID_INPUT  \
            "非法輸入。"

        #define ERROR_MSG_GLOBAL_PARAM  \
            "PARAM 指示符不能出現在全局作用域。"

        #define ERROR_MSG_MAIN_PARAM  \
            "PARAM 指示符不能出現在_Main函數中"

        #define ERROR_MSG_GLOBAL_INSTR  \
            "指令不能出現在全局作用域。"

        #define ERROR_MSG_INVALID_INSTR  \
            "非法指令。"

        #define ERROR_MSG_GLOBAL_LABEL  \
            "標簽不能出現在全局作用域。"

        #define ERROR_MSG_LINE_LABEL_REDEFINITION  \
            "行標簽重復定義。"

        #define ERROR_MSG_INVALID_OP  \
            "非法操作數。"

        #define ERROR_MSG_INVALID_STRING  \
            "非法字符串。"

        #define ERROR_MSG_UNDEFINED_IDENT  \
            "標識符未定義。"
    
        #define ERROR_MSG_INVALID_ARRAY_NOT_INDEXED  \
            "數組必須通過索引使用。"        
    
        #define ERROR_MSG_INVALID_ARRAY  \
            "非法數組。"

        #define ERROR_MSG_INVALID_ARRAY_INDEX  \
            "非法數組索引。"

        #define ERROR_MSG_UNDEFINED_LINE_LABEL  \
            "行標簽未定義"

        #define ERROR_MSG_UDEFINED_FUNC  \
            "函數未定義。"

// ---- 數據結構 -----------------------------------------------------------------------------

    // ---- 匯編指令流 -----------------------------------------------------------------------

        struct Op
        {
            int     iType;      // 類型
            union
            {
                int     iIntLiteral;    // 整形字面量
                float   fFloatLiteral;  // 浮點型字面量
                int     iStringTableIndex;  // 字符串表索引
                int     iStackIndex;    // 堆棧索引
                int     iInstrIndex;    // 指令索引
                int     iFuncIndex;     // 函數索引
                int     iHostAPICallIndex;  // 主應用程序API調用索引
                int     iReg;           // 寄存器碼
            };
            int     iOffsetIndex;       // 偏移量索引
        };

        struct Instr
        {
            int     iOpcode;    // 操作碼
            int     iOpCount;   // 操作數
            Op      *pOpList;   // 指向操作數列表的指針
        };

    // ---- 腳本頭 ---------------------------------------------------------------------------

        struct ScriptHeader
        {
            int     iStackSize;         // 要求的堆棧大小
            int     iGlobalDataSize;    // 腳本中全局數據的大小
            int     iIsMainFuncPresent; // _Main () 是否存在
            int     iMainFuncIndex;     // _Main () 函數的索引
        };

    // ---- 詞法分析 -------------------------------------------------------------------------

        typedef int     Token;

        struct Lexer
        {
            int     iCurrSourceLine;    // 當前代碼行

            unsigned int     iIndex0;            // 取詞索引0
            unsigned int     iIndex1;            // 取詞索引1

            Token   CurrToken;          // 當前token
            char    pstrCurrLexeme[ MAX_LEXEME_SIZE ];  // 當前單詞

            int     iCurrLexState;      // 詞法分析器當前狀態
        };

    // ---- 簡單鏈表 -------------------------------------------------------------------------

        struct LinkedListNode  
        {
            void    *pData;             // 指向節點數據的指針
            LinkedListNode  *pNext;     // 指向鏈表中下一個節點的指針
        };

        struct LinkedList       
        {
            LinkedListNode  *pHead;     // 指向鏈表頭節點的指針
            LinkedListNode  *pTail;     // 指向鏈表末節點的指針
            int     iNodeCount;         // 連表中節點的數量
        };

    // ---- 函數表 ---------------------------------------------------------------------------

        struct  FuncNode
        {
            int     iIndex;                     // 索引
            char    pstrName[MAX_IDENT_SIZE];   // 名稱
            int     iEntryPoint;                // 入口點
            int     iParamCount;                // 參數個數
            int     iLocalDataSize;             // 局部數據大小
        };
        
    // ---- 符號表 ---------------------------------------------------------------------------

        struct SymbolNode
        {
            int     iIndex;                     // 索引
            char    pstrIdent[MAX_IDENT_SIZE];  // 標識符
            int     iSize;                      // 大小
            int     iStackIndex;                // 符號指向的堆棧索引
            int     iFuncIndex;                 // 符號所在的函數
        };

    // ---- 標簽表 ---------------------------------------------------------------------------

        struct LabelNode
        {
            int     iIndex;         // 標簽表節點
            int     iTargetIndex;   // 目標指令索引
            int     iFuncIndex;     // 標簽所屬函數
            char    pstrIdent[MAX_IDENT_SIZE];  // 標識符
        };

    // ---- 指令查找表 -----------------------------------------------------------------------

        typedef int OpTypes;
        
        struct InstrLookup
        {
            char    pstrMnemonic[MAX_INSTR_MNEMONIC_SIZE];  // 助記符
            int     iOpcode;    // 操作碼
            int     iOpCount;   // 操作數個數
            OpTypes *OpList;    // 操作數類型列表指針 
        };

    

// ---- 全局變量 -----------------------------------------------------------------------------

    // ---- 源代碼 ---------------------------------------------------------------------------

        char    **g_ppstrSourceCode     = 0;    // 源代碼緩存指針
        int     g_iSourceCodeSize       = 0;    // 源代碼行數
        
        FILE    *g_pSourceFile          = 0;    // 源文件指針

        char    g_pstrSourceFileName[ MAX_FILENAME_SIZE ];   // 源代碼文件名
        char    g_pstrExecFileName[ MAX_FILENAME_SIZE ];     // 可執行文件名

    // ---- 匯編指令流 -----------------------------------------------------------------------

        Instr   *g_pInstrStream         = 0;    
        int     g_iInstrStreamSize      = 0;    // 指令流大小
        int     g_iCurrInstrIndex       = 0;    // 當前指令索引

    // ---- 詞法分析 -------------------------------------------------------------------------

        Lexer   g_Lexer;                        // 詞法分析器結構      

    // ---- 腳本 -----------------------------------------------------------------------------

        ScriptHeader    g_ScriptHeader;         // 腳本頭結構
        bool            g_bIsSetStackSizeFound; // SetStackSize 標志

    // ---- 字符串表 -------------------------------------------------------------------------

        LinkedList  g_StringTable;

    // ---- 函數表 ---------------------------------------------------------------------------

        LinkedList  g_FuncTable;

    // ---- 標簽表 ---------------------------------------------------------------------------

        LinkedList  g_LabelTable;

    // ---- 符號表 ---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线播放高清精品| eeuss鲁片一区二区三区在线看| **性色生活片久久毛片| 日本一区二区免费在线| 久久久欧美精品sm网站| 国产日韩v精品一区二区| 国产欧美一区二区精品久导航| 精品国产一区二区精华| 日韩一级免费观看| 精品久久久久久久人人人人传媒 | 国产精品污污网站在线观看| 日韩精品最新网址| 亚洲精品在线免费观看视频| 久久噜噜亚洲综合| 国产精品久久久久久福利一牛影视| 国产精品国产三级国产三级人妇 | 日本网站在线观看一区二区三区| 日韩精品国产精品| 国产一区二区三区久久悠悠色av| 国产成人精品一区二区三区网站观看 | 亚洲蜜臀av乱码久久精品蜜桃| 亚洲一线二线三线视频| 美女一区二区在线观看| 风流少妇一区二区| 91福利在线播放| 日韩免费成人网| 亚洲国产精品精华液2区45| 自拍偷拍欧美激情| 日韩av一区二区三区四区| 国产精品123| 欧美日韩一区不卡| 久久久不卡网国产精品一区| 亚洲精品第1页| 韩国精品一区二区| 91麻豆免费在线观看| 欧美一三区三区四区免费在线看| 日本一区二区三级电影在线观看| 亚洲v日本v欧美v久久精品| 久久99精品国产麻豆不卡| 色8久久精品久久久久久蜜| 日韩一区二区三区视频在线| 亚洲男同性视频| 国产老妇另类xxxxx| 91黄色激情网站| 国产亚洲午夜高清国产拍精品| 一区二区三区久久| 国产精品一区专区| 91精品国产综合久久蜜臀| 国产精品国产三级国产aⅴ中文| 日本中文字幕一区二区有限公司| 99久久综合精品| 2023国产精品视频| 午夜精品一区二区三区免费视频| av中文字幕不卡| 26uuu久久综合| 日日夜夜精品视频免费| 色丁香久综合在线久综合在线观看| 久久精品夜色噜噜亚洲aⅴ| 日本va欧美va瓶| 欧美日韩在线综合| 亚洲欧美综合色| 国产91清纯白嫩初高中在线观看| 日韩欧美www| 免费成人性网站| 777亚洲妇女| 五月婷婷久久丁香| 91久久精品午夜一区二区| 国产精品三级av在线播放| 韩国毛片一区二区三区| 精品国产乱码久久久久久1区2区| 奇米色一区二区| 日韩美女天天操| 久久精品久久精品| 精品美女被调教视频大全网站| 美女高潮久久久| 欧美精品一区二区三| 免费成人美女在线观看| 欧美一级在线观看| 青青草原综合久久大伊人精品| 欧美美女一区二区三区| 日韩精品电影在线| 日韩欧美国产电影| 国内成人免费视频| 久久九九全国免费| www.色精品| 亚洲色图.com| 欧美视频一区二区三区四区| 亚洲成人中文在线| 6080午夜不卡| 精品一区二区精品| 国产精品日韩成人| 在线观看91视频| 麻豆精品一区二区三区| 久久综合久久综合亚洲| 国产精品资源在线看| 日韩一区有码在线| 欧美日韩亚洲高清一区二区| 免费成人av在线播放| 国产视频一区二区在线| av高清久久久| 日韩av一区二区三区四区| 欧美精品一区二区三区高清aⅴ| 成人毛片老司机大片| 亚洲国产综合色| 精品国产乱码久久久久久夜甘婷婷| thepron国产精品| 偷偷要91色婷婷| 国产欧美精品一区| 在线日韩一区二区| 国产真实乱子伦精品视频| 亚洲欧洲美洲综合色网| 日韩一区二区在线免费观看| 国产精品一品二品| 亚洲午夜激情av| 国产女主播在线一区二区| 欧美日韩综合在线免费观看| 国产老妇另类xxxxx| 午夜一区二区三区视频| 中文一区一区三区高中清不卡| 欧美日韩精品免费| 不卡的看片网站| 久久 天天综合| 亚洲午夜在线视频| 国产欧美久久久精品影院| 正在播放一区二区| 色哟哟精品一区| 国产乱国产乱300精品| 日日夜夜免费精品| 亚洲精品视频一区二区| 国产亚洲综合在线| 日韩欧美在线影院| 欧美日韩日日夜夜| 一本在线高清不卡dvd| 国产精品亚洲一区二区三区妖精| 香蕉久久夜色精品国产使用方法 | 不卡av在线网| 国产一区二区伦理片| 亚洲va天堂va国产va久| 日韩码欧中文字| 国产欧美精品区一区二区三区 | 欧美成人性福生活免费看| 欧美在线看片a免费观看| 成人一区二区三区中文字幕| 久久99精品久久久久久| 视频一区二区三区入口| 亚洲国产视频一区| 亚洲精品成人天堂一二三| 国产精品国产自产拍高清av王其| 久久精品免费在线观看| 2023国产精华国产精品| 精品久久久久久久人人人人传媒| 日韩亚洲欧美在线观看| 日韩手机在线导航| 日韩亚洲欧美在线| 精品国产乱码久久久久久图片| 日韩片之四级片| 欧美va亚洲va在线观看蝴蝶网| 精品久久久久久亚洲综合网| wwww国产精品欧美| 国产偷v国产偷v亚洲高清| 亚洲国产精品t66y| 中文字幕在线观看一区| 亚洲激情图片一区| 亚洲一二三专区| 喷水一区二区三区| 九色综合狠狠综合久久| 国产乱码精品一区二区三区av | 日韩一区二区三| 26uuu成人网一区二区三区| 2014亚洲片线观看视频免费| 久久久久久久网| 日韩理论片中文av| 亚洲成人免费影院| 久久精品国产999大香线蕉| 国产成人亚洲综合a∨婷婷| 9人人澡人人爽人人精品| 色爱区综合激月婷婷| 日韩一二三四区| 中文字幕一区二区三区av| 亚洲午夜久久久久久久久电影网| 蜜臂av日日欢夜夜爽一区| 国产一区二区在线电影| 色综合天天综合在线视频| 欧美日韩精品欧美日韩精品一综合| 精品少妇一区二区三区日产乱码 | 91黄色免费看| 精品福利一区二区三区| 国产精品久久网站| 日本少妇一区二区| 懂色av中文字幕一区二区三区| 欧美三片在线视频观看| 久久久91精品国产一区二区三区| 亚洲女人的天堂| 国内精品伊人久久久久av一坑| 99精品视频免费在线观看| 欧美刺激午夜性久久久久久久| 亚洲欧美一区二区三区国产精品| 看电视剧不卡顿的网站| 色哟哟在线观看一区二区三区| 精品嫩草影院久久|