簡體   English   中英

自上而下的解析與遞歸語法

[英]Top-Down Parsing with recursive grammar

我在學校里有一個作業,告訴我們按照以下語法在Java中創建一個自上而下的解析器:

    assign = id , '=' , expr , ';' ;
    expr = term , [ ( ’+’ | ’-’ ) , expr ] ;
    term = factor , [ ( ’*’ | ’/’) , term] ;
    factor = int | ’(’ , expr , ’)’ ;

我想我已經理解了解析的基本概念,例如“如果我們有一個id,請檢查下一個標記是否為'=',下一個標記是否為expr,以及之后的下一個標記是否為';'”。 正確?

現在,如果我想檢查輸入的輸入是否為表達式:

我檢查標記以查看是否有術語,然后是否有“ +標記”或“-標記”,最后是否有“ expr”。 但是,如果我檢查是否存在“ expr”,它將循環播放,並最終一次又一次地檢查是否存在“ expr”。

我看不出我該怎么做? 有人能幫我嗎?

親切的問候,

OP似乎擔心,如果他的expr規則代碼調用expr的解析規則,它將陷入無限循環。

他不用擔心!

這需要一些思考,但是當調用C1時實際發生的是,被調用的expr規則測試一個term 如果那是組成expr的求和集合中的最后一項,則將沒有跟隨的正/負,並且C1調用將終止並返回到父解析例程,然后該例程將完成。 沒有循環。

如果不是最后一項,則將對該詞項進行解析,將看到加號/減號,並且C1實例將再次調用C2返回expr。 這種遞歸的行為就像一個循環的迭代,並按照我們的描述進行處理。

應該工作正常。

暫無
暫無

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

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