花了差不多兩個星期的時間將一個可配置語法分析器(Combinator)寫好了。這個語法分析器被設計來完成以下任務:
1、易于使用,并且在運行時可更改
2、提供對分析字符串和容器的支持
3、可使用正則表達式輔助定義分析器
4、如果覺得預定義的設備不滿意,用戶可以自行提供新的文法元素(譬如說增加一種使用通配符進行語法分析的元素)
5、提供可配置錯誤恢復策略,提供合理的錯誤發生位置信息,用戶可根據自己的意愿來決定錯誤信息的內容。
不過直接寫這玩意兒怎么開發出來的比較枯燥,所以這里我準備了一個Demo,也是我自己正在使用的,FpMacro。
FpMacro跟C++的宏差不多,不過主要區別是,宏本身再也不被當成字符串替換的工具,而是一個生成字符串的函數。于是你可以將一個宏當成函數指針傳進另一個宏,形成高級的功能。舉個例子:
1 $$define $TEMPLATE_ITEM($index) typename T$index
2 $$define $TEMPLATE_LIST($count) $loopsep($count,0,$TEMPLATE_ITEM,$(,))
3 $TEMPLATE_LIST(3)
上面的FpMacro代碼將產生“typename T0,typename T1,typename T2”。使用FpMacro再也不需要任何C++宏里面的惡心技巧(譬如為了讓兩段代碼得以鏈接你需要雙重包裝,類似#define _(X) __(X) ; #define __(X) #X),再也不需要為循環產生代碼費心思,再也不用考慮宏的替換順序,一切都變得井然有序。
FpMacro是可配置語法分析器的Demo,然而Function.f.fpm(這是一個在以后會上傳的FpMacro代碼文件)則是FpMacro的Demo。Function.f.fpm產生了一段支持0-10個參數的functor、參數綁定和函數組合的代碼,可以認為functor跟tr1::function的功能基本一致。通過這個例子可以更加形象地體會FpMacro的高級功能。在接下來的系列文章中,我將會通過分析FpMacro,將FpMacro的運行過程詳細剖析,讓大家明白可配置語法分析器每一個設計細節的原因,并告訴大家如何實現可配置語法分析器。
posted on 2009-11-27 10:01
陳梓瀚(vczh) 閱讀(3122)
評論(2) 編輯 收藏 引用 所屬分類:
VL++3.0開發紀事