Files
h2inc-old/lexer/keywords.py
2018-07-17 11:51:38 +02:00

107 lines
2.6 KiB
Python

# (c) 2018 Jan Lerking
# Python lexer for c header files.
# Used for creating corresponding NASM include files.
# Contains tokens expanded with reserved 'C' keywords
def init():
global tokens
tokens = [
'CSTART',
'CMID',
'CEND',
'RPAREN',
'LPAREN',
'ENDLINE',
'POINTER',
'PREPROCESS',
'ID',
'PLUS',
'MINUS',
'DIV',
'MULT',
'ASSIGN',
'EQUAL',
'LBRACE',
'RBRACE',
'COMMA',
'SEMICOLON',
'LANGLE',
'RANGLE'
]
reserved = {
'auto' : 'AUTO',
'break' : 'BREAK',
'case' : 'CASE',
'char' : 'CHAR',
'const' : 'CONST',
'continue' : 'CONTINUE',
'default' : 'DEFAULT',
'do' : 'DO',
'int' : 'INT',
'long' : 'LONG',
'register' : 'REGISTER',
'return' : 'RETURN',
'short' : 'SHORT',
'signed' : 'SIGNED',
'sizeof' : 'SIZEOF',
'static' : 'STATIC',
'struct' : 'STRUCT',
'switch' : 'SWITCH',
'typedef' : 'TYPEDEF',
'union' : 'UNION',
'unsigned' : 'UNSIGNED',
'void' : 'VOID',
'volatile' : 'VOLATILE',
'while' : 'WHILE',
'double' : 'DOUBLE',
'else' : 'ELSE',
'enum' : 'ENUM',
'extern' : 'EXTERN',
'float' : 'FLOAT',
'for' : 'FOR',
'goto' : 'GOTO',
'if' : 'IF'
}
global preprocessor_directives
preprocessor_directives = {
'#include' : 'PREPROCESS',
'#define' : 'PREPROCESS',
'#undef' : 'PREPROCESS',
'#if' : 'PREPROCESS',
'#ifdef' : 'PREPROCESS',
'#ifndef' : 'PREPROCESS',
'#error' : 'PREPROCESS',
'__FILE__' : 'PREPROCESS',
'__LINE__' : 'PREPROCESS',
'__DATE__' : 'PREPROCESS',
'__TIME__' : 'PREPROCESS',
'__TIMESTAMP__' : 'PREPROCESS',
'pragma' : 'PREPROCESS',
'#' : 'PREPROCESS',
'##' : 'PREPROCESS'
}
global regular
regular = {
'/*' : 'CSTART',
'*' : 'CMID',
'*/' : 'CEND',
'=' : 'ASSIGN',
'==' : 'EQUAL',
'{' : 'LBRACE',
'}' : 'RBRACE',
'\+' : 'PLUS',
'-' : 'MINUS',
'\*' : 'MULT',
'/' : 'DIV',
'\(' : 'LPAREN',
'\)' : 'RPAREN',
',' : 'COMMA',
';' : 'SEMICOLON',
'\<' : 'LANGLE',
'\>' : 'RANGLE'
}
tokens += reserved.values()