我經常遇到以下 bnf 來決議基本算術運算式:
S :== EXPRESSION
EXPRESSION :== TERM | TERM { [ ,-] TERM] }
TERM :== FACTOR | FACTOR { [*,/] FACTOR] }
FACTOR :== number | '(' EXPRESSION ')'
-- or --
expression : term | term term | term ? term
term : factor | factor * factor | factor / factor
factor : number | ( expression ) | factor | ? factor
這將決議類似2 3-4*(1 2). 但是,決議類似的東西需要什么1 1 1 1,因為上述因素不能也指運算式產生本身?
uj5u.com熱心網友回復:
您的第一個版本是正確的,但不是 BNF。它使用“擴展”語法,其中包括重復運算子{ ... },這意味著“大括號內的模式的零個或多個實體”。SoTERM { [ ,-] TERM] }表示TERMorTERM TERM或TERM - TERM TERMorTERM TERM TERM - TERM等??。
您的第二個版本不正確(并且與第一個版本不對應)。你沒有提供任何參考,所以我不知道你是復制不正確還是你的來源是錯誤的。這是一個正確的版本:
expression: term | expression term | expression ? term
term: factor | term * factor | term / factor
factor: number | ( expression ) | factor | ? factor
我希望它如何分析1 1 1 1成左相關的添加序列變得清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525819.html
標籤:解析蚂蚁语法
上一篇:具有單子決議庫的決議器的高級組織
