看板 PLT 關於我們 聯絡資訊
※ 引述《mode1224 (酷比)》之銘言: : 想請問BNF語法規則推導 : 使用下列 B.N.F.文法為下列敘述建構一剖析樹 : A:=B DIV 10 + C x D : <assign>::=id:=<exp> : <exp>::=<term>∣<exp>+<term>∣<exp>-<term> : <term>::=<factor>∣<term>x<factor>∣<term>DIV<factor> : <factor>::=id∣int∣(<exp>) : 運算子順序:x div > + - : 但是自己寫發現如果有負號該如何定義文法 : 例:(-a+b) : 運算子順序:() > 正負 > +- : 有人能解答一下嗎,非常感謝。 有正負就是要加上 unary operator. 我自己都用 LL parser, 所以把你的 BNF 拿掉 left recursion 加上 unary operator 後差不多變這樣: <assign> := id ":=" <exp> <exp> := <term> (("+" | "-") <term>)* <term> := <unary> (("*" | "/") <unary>)* <unary> := ("-")? <factor> <factor> := id | "int" | "(" <exp> ")" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.166.80
mode1224:抱歉請問""和?是什麼意思...說明一下好嗎,感恩 03/15 02:27
macbuntu:"x" 表示 x 這個 literal, (x)? 表示 x 可出現0或1次 03/15 02:43
mode1224:{x}or[x]0次或1次不是這種符號嗎EBNF用在BNF上面的符號 03/15 02:50
mode1224:抱歉因為我的範例跟您打的有差異,所以還在理解 03/15 02:51
ykjiang:? 是 EBNF 才加進來的東西... 03/15 02:58