[英]extract BNF grammar rules from yacc file
我有一個描述某種語言的yacc文件,我正在使用IMP(eclipse項目)開發一個編輯器。我使用LPG作為解析器生成器,所以我需要從我的yacc文件中提取BNF規則。 我收到的yacc文件包含規則和操作。 但是,我想只提取要在LPG中使用的語法描述的規則。 一種方法是通過手動提取規則並將其重新格式化為BNF語法(或者可以編寫程序將其轉換為我想要的方式)。 我想知道是否有自動執行此操作的方法。 我在一些博客中讀到野牛可以提供幫助,但我無法找到合適的命令。 有誰知道如何處理這個問題。
我不能真正發布我所擁有的yacc文件,因為它是保密的。 但我可舉個例子如下
argExprList:
assignExp
{
// some rules here
}
| assignExpList ',' assignExp
{
//some other rules here
}
;
我希望它被轉換成簡單的樣子
argExpList ::= assignExp|assignExpList ',' assignExp
如果您准備進行一些后期處理,野牛可以提供幫助。
如果使用-v
選項運行bison,它將生成一個名為filename.output
(其中filename
是.y
文件的基本名稱); 該文件包含語法的副本和每個州的描述。 語法沒有動作,每行有一個生產。 但是你需要做一些工作:
每個產品都有編號。 你需要刪除這些數字。
如果存在中規則操作,它們將顯示為奇怪命名的空非終端。 名稱將類似$@8
或@2
。 您需要刪除這些令牌及其相應的空制作。
空作品(至少在最近的一個版本的野牛中)顯示為/* empty */
。 這可能不是你的偏好。
它不會改變:
to ::=
我用這種方式從yacc / bison文件中提取了語法,而且非常簡單; 您可以使用簡單的sed
或awk
腳本進行上述所有更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.