Я работаю над синтаксическим анализатором python, используя ply, и мне нужно анализировать ввод в виде:
VAR VAR1 001
+000 000 000 000
Где код создаст переменную с именем VAR 1, а затем присвоит ей значение 0.
регулярное выражение, которое я написал для экземпляра:
t_INST = r'[\+|-]0[ ][0-9][0-9][0-9][ ][0-9][0-9][0-9][ ][0-9][0-9][0-9][ ][0-9][0-9][0-9]'
Однако при запуске моей программы PLY печатает следующее:
Illegal character '+'
Репродуктор следует:
import ply.lex as lex
tokens = ['INST']
t_INST = r'[+-]0[ ](\d{3}[ ]){3}\d{3}';
t_ignore = ' \t'
def t_error(t):
print("Illegal character '%s'" % t.value[0])
t.lexer.skip(1)
lexer = lex.lex()
def parse(input_string):
ret = []
lexer.input (input_string)
while True:
tok = lexer.token()
if not tok:
break # No more input
ret.append((tok.type, tok.value))
return ret
print parse("+0 000 000 000")
|
не является допустимым первым символом, вам, вероятно, также нужен[+-]
, а не[+|-]
. - person Charles Duffy   schedule 07.04.2017parse()
никогда не вызывается?). Чтобы быть полным и поддающимся проверке, MCVE должен фактически содержать достаточно данных, чтобы фактически вызвать сбой. . (Конечно, одна из приятных особенностей gists заключается в том, что вы можете редактировать их на месте — или проверить их с помощью git, отредактировать код в локальном редакторе и снова зафиксировать их). - person Charles Duffy   schedule 07.04.2017t_INST = r'[+-]0[ ]'
; вы заметите, что это совпадает. Таким образом, проблема не в+
. - person Charles Duffy   schedule 07.04.2017+0 000 000 000
ни в коем случае не соответствует(+|-) XXX XXX XXX XXX
. - person Charles Duffy   schedule 07.04.2017[\+|-]
является допустимым регулярным выражением. Откуда вылезает эта ошибка? - person   schedule 07.04.2017