Annotation of nono/util/iasm/iasm.h, revision 1.1.1.1

1.1       root        1: //
                      2: // XM6i
                      3: // Copyright (C) 2013 [email protected]
                      4: //
                      5: // 簡易アセンブラ
                      6: //
                      7: 
                      8: #ifndef iasm_h
                      9: #define iasm_h
                     10: 
                     11: #include <string>
                     12: 
                     13: #define countof(x)     (sizeof(x) / sizeof(x[0]))
                     14: 
                     15: typedef std::string String;
                     16: 
                     17: enum token_type_t {
                     18:        T_END,
                     19:        T_SPACE,                /* 空白 */
                     20:        T_CHAR,                 /* 文字 */
                     21:        T_STRING,               /* 文字列 */
                     22:        T_NUMBER,               /* 数字(16進、10進) */
                     23:        T_LITERAL,              /* リテラル(ラベル) */
                     24:        T_SIZE,                 /* サイズサフィックス */
                     25:        T_SHARP,                /* '#' */
                     26:        T_COLON,                /* ':' */
                     27:        T_COMMA,
                     28:        T_LPAREN,
                     29:        T_RPAREN,
                     30:        T_PLUS,
                     31:        T_MINUS,
                     32:        T_MULTI,
                     33:        T_DIVIDE,
                     34:        T_LT,
                     35:        T_GT,
                     36: 
                     37:        T_MAX,
                     38: };
                     39: 
                     40: class Token
                     41: {
                     42:  public:
                     43:        token_type_t type;      /* 種別 */
                     44:        String word;            /* 語 */
                     45:        int number;                     /* (必要なら) 数値 */
                     46:  public:
                     47:        Token();
                     48: 
                     49:        void clear();
                     50: 
                     51:        const char *type_name() const;
                     52: 
                     53:        static const char *type_name(token_type_t t);
                     54: 
                     55:        static const char *type_str[];
                     56: 
                     57: };
                     58: 
                     59: class Scanner
                     60: {
                     61:        /* 1文字の記号テーブル */
                     62:        struct mark_t {
                     63:                int chr;                        /* 文字 */
                     64:                token_type_t type;      /* トークン種別 */
                     65:        };
                     66: 
                     67:  public:
                     68:        Scanner(String& src);
                     69: 
                     70:        virtual ~Scanner();
                     71: 
                     72:        bool get_token(Token& t);
                     73: 
                     74:        String errmsg;
                     75: 
                     76:        int isSize(int c) const;
                     77: 
                     78:        static bool isLabel1(int c);
                     79: 
                     80:        static bool isLabel2(int c);
                     81: 
                     82:  private:
                     83:        int getch(int offset = 0) const;
                     84: 
                     85:        String buf;
                     86: 
                     87:        int ptr;
                     88: 
                     89:        static mark_t mark[];
                     90: 
                     91: };
                     92: 
                     93: #endif /* !iasm_h */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.