能接受某種語言做爲擴展的項目,一般都會內置一個代碼解析器。算法
代碼解析器比較複雜,一般是把語法解析和語法樹解析放在一塊兒:邊解析代碼,邊構建數據結構。數據結構
若是把語法做爲一種配置文件分離出來,那麼就能夠設計通用的語法解析算法,讓語言解析的複雜度下降。架構
新的架構須要新的抽象:語法抽象。設計
語法組合方式一般分爲:順序結構,分支結構,嵌套結構。而基本語法包括:字符串,字符類,無關緊要,重複和沒有。字符串
順序結構: a b c 分支結構: [a b c] 嵌套結構: [a [a b] ] 字符串是連續的字符:abc 字符類是某類字符的集合:[:alpha] 無關緊要: a? 重複: a+ 沒有: !a 能擴展的應用程序大部分都接受某種形式的語法文本做爲配置文件,從而構建定製較爲複雜的同類產品。產品
隨着用戶需求的變化,這種形式化的語言也變得複雜。大部分產品中解析這種形式語言的代碼是一個總體,並無將語言分離出來,而是將語言規則和生成可處理的數據結構合成一體。擴展
這一般很快,並且也不太複雜。但隨着語法需求的變化,這段代碼成爲最爲頻繁的改動部分,並且愈來愈複雜。配置
這種狀況致使語言解析類產品的升級很是緩慢,由於牽一髮而動全身,某個部分的修改可能致使相關的許多代碼發生變化。語法
但這部分代碼複雜到必定程度,即便最聰明的人也會感到沮喪。也許新的語言類產品誕生,也許這個產品成爲歷史。程序