我有一個應用程序,我已經有一種解析器用於某種語法,並且需要爲另一個目的添加另一個不同的語法。是否有可能在同一個應用程序中有兩個或多個Lex/Yacc分析器
是否有可能有多個?
如果是的話,你如何獲得另一個入口點?
感謝
大衛艾倫·芬奇
我有一個應用程序,我已經有一種解析器用於某種語法,並且需要爲另一個目的添加另一個不同的語法。是否有可能在同一個應用程序中有兩個或多個Lex/Yacc分析器
是否有可能有多個?
如果是的話,你如何獲得另一個入口點?
感謝
大衛艾倫·芬奇
我想你可以到這個使用--name-prefix
選項野牛,以及--prefix
選項的Flex。
在這兩種情況下,它們允許您替換使用您自己選擇的前綴生成的函數上使用的默認「yy
」前綴。
是的,這是可能的。
yacc應該有一個-p標誌,你可以指定一個不同的前綴而不是默認的「yy」。
由lex conatins生成的文件只有一個符號在外部使用:yylex。例如,您可以使用-Dyylex = mySecondLex進行編譯。
不是一個直接的答案,但您可能需要考慮使用更通用的方法,例如GoldParser,它允許您使用通用引擎處理由語法生成的LALR和DFA表格。
通過這種方法,您可以在同一個應用程序中使用任意數量的不同語法,並且更改語法不會創建新的源代碼,而只是新的表格文件(可能包含爲嵌入式資源或類似文件)。
標準lex和yacc沒有辦法做到這一點。 Flex和Bison也是如此,就像其他一些實現一樣。既然你說(在評論中)你沒有使用flex和bison,你使用哪個版本的lex和yacc 是?
我使用lex和yacc,但是如果我們更改爲免費版本,這很好。謝謝戴夫 – 2009-04-08 14:03:34
啊,但你確實提到他們在你的標籤... – Alnitak 2009-04-08 15:04:31
真的。如果他們只能使用flex和bison,那麼它才能工作。我們將會改變使用它們。 – 2009-04-09 09:28:58