我寫了一個小而簡單的標記器,但沒有使用正則表達式。試圖寫一個標記器時,我應該使用正則表達式嗎?
我從第一個索引開始,迭代每個字符直到結束並創建所需的標記。
我將它展示給一位同事說,如果沒有進入任何深度,就會比使用正則表達式更簡單。
那麼我應該重寫並期望它「更好」嗎?
我寫了一個小而簡單的標記器,但沒有使用正則表達式。試圖寫一個標記器時,我應該使用正則表達式嗎?
我從第一個索引開始,迭代每個字符直到結束並創建所需的標記。
我將它展示給一位同事說,如果沒有進入任何深度,就會比使用正則表達式更簡單。
那麼我應該重寫並期望它「更好」嗎?
兩個問題,你應該問:
一)如果事情應該改變,其中之一將是最容易維護? b)如果它正在工作,並且你不希望有任何改變,你是否真的想花更多的時間在它上面?
我敢肯定,性能差異足夠小,可以忽略。編程經驗,並最大限度地減少潛在的錯誤,是最重要的問題。
個人而言,我會選擇正則表達式,因爲它更酷,但正則表達式可能會變得複雜,以讀取/理解定義是否太寬泛。 – 2010-08-17 09:37:29
我不這麼認爲。正則表達式必須功能非常豐富,並且正因爲此,程序運行速度可能會變慢。
很大程度上取決於解析的語言和「更好」的定義。
通常可以使用有限狀態機完成標記化,這相當於規範正則表達式。如果你做出正常的正則表達式,閱讀和維護比自制的FSA更容易。使用像flex或jflex等工具,他們會將正則表達式編譯爲最小的FSA,從而提供非常好的性能。手動操作只能作爲練習。
Lexers存在幾種實現方式,很可能是您最喜歡的語言。
如果你想。 – salathe 2010-08-17 09:13:28