Tuesday, August 14, 2007

突然意識到一些關于regular expression和FSM的事情

學習Ruby的regular expression的時候,突然意識到一些事情。不算什麽新奇的發現,但這些簡單的事實塑造了我們(programmers)的日常生活,而我以前確從未意識到。
1.爲什麽lexical analysis和parse如此不同?因爲,當我們用regular exp/FSM進行lexical analysis時,我們關心的只是某一string是否和整個expression吻合,而用context-free grammar做parse的時候,我們要不僅要回答string是否和grammar吻合,還要找到string的每一部分和grammar的每一部分的對應關係;前者的答案只包括“是”和“否”,而後者的答案要複雜得多,以致于要用樹表示!
2.其實regular grammar也是ambiguous的,我們之所以很少關心遮一點,是因爲,如1所述,我們不在乎regular expression中哪一部分和string中哪里部分對應。而用context free grammar來parse時,我們在乎對應關係,于是多出了一些煩惱。
3.爲什麽我們用FSM,確不用pushdown automata?同樣的原因:pushdown automata只能回答grammar和整個string是否吻合,不能找出各部分的對應。

No comments: