Mein Ziel ist es, wie Python mit Strings zu parsen.Lex Strings mit Einzel-, Doppel- oder Dreifach-Anführungszeichen
Frage: Wie eine lex schreiben folgendes zu unterstützen:
"string..."
'string...'
"""multi line string \n \n end"""
'''multi line string \n \n end'''
Einige c Ode:
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)
Meine aktuelle Idee ist 4 eindeutige Zustände zu erstellen, die die 4 verschiedenen String Fällen übereinstimmen, aber ich frage mich, ob es ein besserer Ansatz ist.
Danke für Ihre Hilfe!
Sie haben 4 verschiedene String-Typen, so würde ich erwarten, würden Sie 4 verschiedene Zustände benötigen. Vermutlich ist "string" '' schlecht gebildet? – nimish
Sie könnten zwei eindeutige Zustände verwenden, einen für einfache Anführungszeichen und einen für dreifache Anführungszeichen, aber Sie müssten das Anführungszeichen irgendwo speichern. Es ist strittig, welche Methode besser ist. – Thayne
Ich habe befürchtet, 4 Zustände aufzubauen ... Können zwei durchgehen? Weil die Start-/Endzustände nicht mit dem anfänglichen Startquotietyp übereinstimmen. Ex '" String .. '... String ... "' wird der Parser sehen ' string..' als String dann '' string ... "' als Parse-Fehler. –