⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clex.py

📁 linux下基于c++的处理器仿真平台。具有处理器流水线
💻 PY
字号:
# ----------------------------------------------------------------------# clex.py## A lexer for ANSI C.# ----------------------------------------------------------------------import lex# Reserved wordsreserved = (    'AUTO', 'BREAK', 'CASE', 'CHAR', 'CONST', 'CONTINUE', 'DEFAULT', 'DO', 'DOUBLE',    'ELSE', 'ENUM', 'EXTERN', 'FLOAT', 'FOR', 'GOTO', 'IF', 'INT', 'LONG', 'REGISTER',    'RETURN', 'SHORT', 'SIGNED', 'SIZEOF', 'STATIC', 'STRUCT', 'SWITCH', 'TYPEDEF',    'UNION', 'UNSIGNED', 'VOID', 'VOLATILE', 'WHILE',    )tokens = reserved + (    # Literals (identifier, integer constant, float constant, string constant, char const)    'ID', 'TYPEID', 'ICONST', 'FCONST', 'SCONST', 'CCONST',    # Operators (+,-,*,/,%,|,&,~,^,<<,>>, ||, &&, !, <, <=, >, >=, ==, !=)    'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD',    'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT',    'LOR', 'LAND', 'LNOT',    'LT', 'LE', 'GT', 'GE', 'EQ', 'NE',        # Assignment (=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=)    'EQUALS', 'TIMESEQUAL', 'DIVEQUAL', 'MODEQUAL', 'PLUSEQUAL', 'MINUSEQUAL',    'LSHIFTEQUAL','RSHIFTEQUAL', 'ANDEQUAL', 'XOREQUAL', 'OREQUAL',    # Increment/decrement (++,--)    'PLUSPLUS', 'MINUSMINUS',    # Structure dereference (->)    'ARROW',    # Conditional operator (?)    'CONDOP',        # Delimeters ( ) [ ] { } , . ; :    'LPAREN', 'RPAREN',    'LBRACKET', 'RBRACKET',    'LBRACE', 'RBRACE',    'COMMA', 'PERIOD', 'SEMI', 'COLON',    # Ellipsis (...)    'ELLIPSIS',    )# Completely ignored characterst_ignore           = ' \t\x0c'# Newlinesdef t_NEWLINE(t):    r'\n+'    t.lineno += t.value.count("\n")    # Operatorst_PLUS             = r'\+'t_MINUS            = r'-'t_TIMES            = r'\*'t_DIVIDE           = r'/'t_MOD              = r'%'t_OR               = r'\|'t_AND              = r'&'t_NOT              = r'~'t_XOR              = r'^'t_LSHIFT           = r'<<'t_RSHIFT           = r'>>'t_LOR              = r'\|\|'t_LAND             = r'&&'t_LNOT             = r'!'t_LT               = r'<'t_GT               = r'>'t_LE               = r'<='t_GE               = r'>='t_EQ               = r'=='t_NE               = r'!='# Assignment operatorst_EQUALS           = r'='t_TIMESEQUAL       = r'\*='t_DIVEQUAL         = r'/='t_MODEQUAL         = r'%='t_PLUSEQUAL        = r'\+='t_MINUSEQUAL       = r'-='t_LSHIFTEQUAL      = r'<<='t_RSHIFTEQUAL      = r'>>='t_ANDEQUAL         = r'&='t_OREQUAL          = r'\|='t_XOREQUAL         = r'^='# Increment/decrementt_PLUSPLUS         = r'\+\+'t_MINUSMINUS       = r'--'# ->t_ARROW            = r'->'# ?t_CONDOP           = r'\?'# Delimeterst_LPAREN           = r'\('t_RPAREN           = r'\)'t_LBRACKET         = r'\['t_RBRACKET         = r'\]'t_LBRACE           = r'\{'t_RBRACE           = r'\}'t_COMMA            = r','t_PERIOD           = r'\.'t_SEMI             = r';'t_COLON            = r':'t_ELLIPSIS         = r'\.\.\.'# Identifiers and reserved wordsreserved_map = { }for r in reserved:    reserved_map[r.lower()] = rdef t_ID(t):    r'[A-Za-z_][\w_]*'    t.type = reserved_map.get(t.value,"ID")    return t# Integer literalt_ICONST = r'\d+([uU]|[lL]|[uU][lL]|[lL][uU])?'# Floating literalt_FCONST = r'((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?'# String literalt_SCONST = r'\"([^\\\n]|(\\.))*?\"'# Character constant 'c' or L'c't_CCONST = r'(L)?\'([^\\\n]|(\\.))*?\''# Commentsdef t_comment(t):    r' /\*(.|\n)*?\*/'    t.lineno += t.value.count('\n')# Preprocessor directive (ignored)def t_preprocessor(t):    r'\#(.)*?\n'    t.lineno += 1    def t_error(t):    print "Illegal character %s" % repr(t.value[0])    t.skip(1)    lexer = lex.lex(optimize=1)if __name__ == "__main__":    lex.runmain(lexer)    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -