Моя цель состоит в том, чтобы анализировать, как Python со строками.
Вопрос: Как написать lex для поддержки следующего:
-
"string..."
-
'string...'
-
"""multi line string \n \n end"""
-
'''multi line string \n \n end'''
Некоторый код:
states = ( ('string', 'exclusive'), ) # Strings def t_begin_string(self, t): r'(\'|(\'{3})|\"|(\"{3}))' t.lexer.push_state('string') def t_string_end(self, t): r'(\'|(\'{3})|\"|(\"{3}))' t.lexer.pop_state() def t_string_newline(self, t): r'\n' t.lexer.lineno += 1 def t_string_error(self, t): print("Illegal character in string '%s'" % t.value[0]) t.lexer.skip(1)
Моя нынешняя идея состоит в создании 4 уникальных состояний, которые будут соответствовать 4 различным строковым случаям, но мне интересно, есть ли лучший подход.
Спасибо за вашу помощь!