#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. Это, по сути, ответ…