2011-06-09 59 views
1

我正在執行兩種語言L1和L2的解析和表達式評估。 重要的是,L1可以作爲單獨的語言使用,也可以作爲L2的一部分使用,L2僅包含幾個關鍵字,這些關鍵字在L1中不存在。是否可以使用爲某種語言開發的FsYacc解析器作爲其他語言解析過程的一部分?

我已經樂星做 - >解析 - > AST生產 - > AST處理過程L1和用於此F#與FsLexFsYacc工具。

是否可以使用已經開發的解析過程(我的意思是令牌,在L1解析器定義AST生產)解析另一種語言L2中?

AST:L1的AST將被用作L2的一部分,並且它將被用於相同的AST處理過程。

FsLex Lexer:對於這兩種語言而言,可能都是通用的,我只需要在L1詞法分析器中包含若干缺少關鍵字即可。但是,如果可以爲L1和L2分別使用詞法分析器,並且參考L2詞法分析器中的L1,那麼會很好。

FsYacc解析器:我不喜歡'copy-C'所有的L1解析器代碼到L2中。 在L1語法分析器中定義的L2,令牌和AST數據生成中是否有引用的方法?

預先感謝

回答

2

這裏有一個有趣article其中提到語法組合物的困難。小故事是,你不能做你想做的事情,使用類似yacc的解析器生成器。這並不意味着你不能使用一些基於宏的系統來實現代碼重用,但它仍然是一種破解。

+0

謝謝 - 將會閱讀文章 – Vitaliy 2011-06-09 12:31:35

+0

我認爲文章中描述的yacc解析器的問題與我的情況無關:L1可以是單獨的語言,L2只是用一些關鍵字擴展L1,L1和L2沒有衝突的規則和關鍵字的含義。我更感興趣的是如何將一種語言的解析器(令牌和AST生產)用於多種fsy文件(更好的是如何分離)解析器(令牌和AST生產) – Vitaliy 2011-06-10 06:35:07

+0

即使您的問題不是病態,它與您的問題有關。沒有設計成yacc的語法組合機制,因爲它不能支持一般情況。 – Joh 2011-06-10 08:17:50