簡體   English   中英

從yacc文件中提取BNF語法規則

[英]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文件的基本名稱); 該文件包含語法的副本和每個州的描述。 語法沒有動作,每行有一個生產。 但是你需要做一些工作:

  1. 每個產品都有編號。 你需要刪除這些數字。

  2. 如果存在中規則操作,它們將顯示為奇怪命名的空非終端。 名稱將類似$@8@2 您需要刪除這些令牌及其相應的空制作。

  3. 空作品(至少在最近的一個版本的野牛中)顯示為/* empty */ 這可能不是你的偏好。

  4. 它不會改變: to ::=

我用這種方式從yacc / bison文件中提取了語法,而且非常簡單; 您可以使用簡單的sedawk腳本進行上述所有更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM