«SyntaxError: не удается создать lexer»?

#python #regex #python-3.x #lexer #ply

#python #регулярное выражение #python-3.x #лексер #ply

Вопрос:

Вот мой код:

 import ply.lex as lex

tokens = (
    'LANGLE', # <
    'LANGLESLASH', # </
    'RANGLE', # >
    'EQUAL', # =
    'STRING', # "hello"
    'WORD') # Welcome!

state = (
("htmlcomment", "exclusive"),
)

t_ignore = ' '

def t_htmlcomment(token):
    r'<!--'
    token.lexer.begin('htmlcomment')

def t_htmlcomment_end(token):
    r'-->'
    token.lexer.lineno  = token.value.count('n')
    token.lexer.begin('INITIAl')

def t_htmlcomment_error(token):
    token.lexer.skip(1)

def t_newline(token):
    r'n'
    token.lexer.lineno  = 1
    pass

def t_LANGLESLASH(token):
    r'</'
    return token

def t_LANGLE(token):
    r'<'
    return token

def t_RANGLE(token):
    r'>'
    return token

def t_EQUAL(token):
    r'='
    return token

def t_STRING(token):
    r'"[^"]*"'
    token.value = token.value[1:-1] # dropping off the double quotes
    return token

def t_WORD(token):
    r'[^ <>n] '
    return token

webpage = "This is <b>my</b> webpage"
htmllexer = lex.lex()
htmllexer.input(webpage)
while True:
    tok = htmllexer.token()
    if not tok: break
    print(tok)
 

Когда я запускаю его, я получаю сообщение об ошибке:

 Traceback (most recent call last):
  File "/home/******/Documents/pro/main.py", line 62, in <module>
    htmllexer = lex.lex()
  File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 901, in lex
    raise SyntaxError("Can't build lexer")
SyntaxError: Can't build lexer
 

Я думаю, что проблема здесь:

 state = (
("htmlcomment", "exclusive"),
)
 

но я не могу это исправить.

У кого-нибудь есть какие-либо предложения, как я могу это исправить?

Спасибо за вашу помощь!

Комментарии:

1. несколько токенов не объявлены в tokens

2. и вы написали state = ( вместо states = (

3. @Casimir et Hippolyte, на самом деле это ответ 🙂

4. Это, по сути, ответ…