簡體   English   中英

將 EBNF 轉換為 LALR 解析器的 BNF

[英]Converting EBNF to BNF for an LALR parser

我知道有幾個帖子的標題相似。 大多數鏈接到一個死網站 - 無論如何我有一個更具體的問題。

我正在嘗試將XPath 規范中EBNF轉換為直接的 BNF,以便我可以輕松創建與 Bison 兼容的語法文件。

我已經有一段時間沒有這樣做了,我不記得遞歸屬於生產的哪一邊。 我認為它是左邊的 - 但是當我通過 Bison 生成的解析器運行純簡 XPath 表達式時,我的“直接”翻譯給了我語法錯誤。

因此,如果有人可以幽默我並權衡 - 所以我不是在追逐鬼魂:

在下面的Expr規則中:

Expr::=     
    ExprSingle ("," ExprSingle)*

這是正確的翻譯嗎? (將遞歸放在左邊):

Expr::= 
    Expr "," ExprSingle
    | ExprSingle

沒關系....

您可以將遞歸放在右側並且它應該可以工作,但是您將使解析器“做更多的工作”,因為它必須跟蹤遞歸的脊椎,並且為此必須使用更多的堆棧位置。

你的翻譯在規則Expr上遞歸,它接受其他Expr產生式。

正確的翻譯應該是:

Expr::=
    ExprSingle Expr1
Expr1::=
    Expr1 "," ExprSingle | ε

暫無
暫無

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

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