私の目的は、Pythonが文字列で行うように解析することです。一重引用符、二重引用符、三重引用符を含むLex文字列
質問:以下をサポートするためのlexの書き方を:
"string..."
'string...'
"""multi line string \n \n end"""
'''multi line string \n \n end'''
一部の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)
私の現在の考えは4つの異なる文字列の例と一致します4の固有の状態を作成することですが、もっと良い方法があります場合、私は思ったんだけど。
ありがとうございました!
を示すようにlexのyaccの ///サンプルコードの基本は、私はあなたが4つの異なる状態を必要とするだろうと期待しておりますので、あなたは4つの異なる文字列型を持っている必要があります。 – nimish
一重引用符と三重引用符の2つのユニークな状態を使用できますが、引用符をどこかに格納する必要があります。どの方法が良いかは議論の余地があります。 – Thayne
私は4つの状態を構築することを恐れていました... 2つのことができますか?開始/終了の状態が最初の開始引用符の型と一致していないためEx '" string .. "... string ..." 'パーサーは' string ... 'を文字列として使用すると、' ... string ... "'が解析エラーとして表示されます。 –