我的目標是像Python一樣用字符串進行解析。帶單引號,雙引號或三引號的Lex字符串
問題:如何寫一個法支持以下內容:
"string..."
'string...'
"""multi line string \n \n end"""
'''multi line string \n \n end'''
一些C頌:
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個不同的字符串匹配的情況,但我想知道如果有一個更好的辦法。
感謝您的幫助!
你有4種不同的字符串類型,所以我期望你會需要4個不同的狀態。大概'''字符串「'''是不合格的? – nimish
你可以使用兩個獨特的狀態,一個用於單引號,一個用於三引號,但是你需要在某處存儲引號字符,有什麼好方法值得商榷 – Thayne
因爲開始/結束狀態不匹配最初的開始引用類型,例如''string ..'... string ...「'解析器將會看到' string..'作爲一個字符串,然後看到'... string ...「'作爲一個分析錯誤。 –