解析代碼的算法

代碼一般是敲出來的,凝聚着程序員的心血。通過解釋器或編譯器的驗證,正確的代碼一般都符合必定的語法規則。一般有如下幾種規則:程序員

關鍵字:keyword正則表達式

這些單詞一般表明了特殊的意思,是語言中的保留字,不能用做變量名稱或函數名稱(有些語言能用變量保存函數)。例如 Javascript, PHP 中的 function, 大多數語言中的 if else then.數組

標識符 identifierruby

這些符號和 keyword 同樣,也有特別的意思,不一樣的組合有着不一樣的意思,例如 == != >= ...數據結構

註釋,字符串或正則表達式(ruby 將正則表達式列爲一種新的數據類型)ide

這些結構一般都有特定的開始字符和結束字符,在結構中,能夠出現和語法大相徑庭的字符組合。 但一種結構中不可能存在另一種結構,是獨立的結構。例如註釋中,不可能有字符串,而字符串中也不能存在註釋(Perl6 彷佛打破了這個規則,能夠在任意結構中插入註釋).函數

能夠嵌套的結構遞歸

數據結構一般是能夠嵌套的,數組中的元素也能夠是數組。條件判斷或循環結構也能夠嵌套。一個循環中能夠用判斷,而判斷中一樣能夠用循環的結構。ip

能夠用正則表達式描述的結構字符串

正則表達式能夠描述一個結構的組合,其中某個部分無關緊要,也能夠屢次出現,但必須按照必定的順序,這種能夠用正則表達式描述(學術專家稱爲 BNF 或 EBNF)的結構,幾乎能夠描述全部的語法規則。 例如 <List> := ( id1 { , id2 }), 其中 { , id2 } 就是能夠屢次出現的結構。

在許多描述語法的表示方法中,存在一種遞歸表示法,也就是一種結構,同時也包含自身。這是定義上的一個表示法,描述的是一種能夠嵌套的結構。若是能將這種結構提早進行解析的話,就不須要這種讓人難以理解的表示方法了。

相關文章
相關標籤/搜索