Source code for etcdb.sqlparser.etcdb_lexer

from __future__ import print_function

states = (
    ('quoted', 'exclusive'),
)
reserved = [
    'SELECT', 'VERSION', 'AUTO_INCREMENT', 'CREATE', 'DEFAULT', 'FULL',
    'INTEGER', 'KEY', 'NULL',
    'PRIMARY', 'SHOW', 'TABLE', 'TABLES', 'VARCHAR', 'NOT', 'DATETIME',
    'DATABASE', 'DATABASES',
    'USE', 'INT', 'FROM', 'COMMIT', 'WHERE', 'OR', 'AND', 'IS', 'SET',
    'AUTOCOMMIT',
    'LONGTEXT', 'SMALLINT', 'UNSIGNED', 'BOOL', 'TINYINT', 'UNIQUE', 'NAMES',
    'INSERT', 'INTO', 'VALUES', 'DROP', 'LIMIT', 'AS', 'UPDATE', 'COUNT',
    'ORDER', 'BY', 'ASC', 'DESC',
    'WAIT', 'IF', 'EXISTS', 'DELETE', 'IN', 'AFTER', 'LOCK'
]

tokens = ['NUMBER', 'STRING', 'STRING_VALUE',
          'GREATER_OR_EQ', 'LESS_OR_EQ', 'N_EQ'] + reserved
literals = "(),`'.@=><*"

t_ignore = ' \t\n'
t_quoted_ignore = t_ignore
t_NUMBER = r'[0-9]+'
t_GREATER_OR_EQ = r'>='
t_LESS_OR_EQ = r'<='
t_N_EQ = r'<>|!='


[docs]def t_begin_quoted(t): r"""'""" t.lexer.begin('quoted')
[docs]def t_quoted_STRING_VALUE(t): r"""[- :.a-zA-Z0-9$/+=_@]+""" if t.value.upper() in reserved: t.type = t.value.upper() t.value = t.value.upper() else: t.type = 'STRING_VALUE' return t
[docs]def t_quoted_end(t): r"""'""" t.lexer.begin('INITIAL')
[docs]def t_STRING(t): r"""[_a-zA-Z0-9]*[_a-zA-Z]+[_a-zA-Z0-9]*""" if t.value.upper() in reserved: t.type = t.value.upper() t.value = t.value.upper() else: t.type = 'STRING' return t
[docs]def t_error(t): print("Illegal character '%s'" % t.value[0]) t.lexer.skip(1)
[docs]def t_quoted_error(t): t_error(t)