作者macbuntu (邀怪)
看板PLT
標題Re: [問題] BNF負號文法請教
時間Sun Mar 15 01:49:04 2009
※ 引述《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
1F:推 mode1224:抱歉請問""和?是什麼意思...說明一下好嗎,感恩 03/15 02:27
2F:→ macbuntu:"x" 表示 x 這個 literal, (x)? 表示 x 可出現0或1次 03/15 02:43
3F:→ mode1224:{x}or[x]0次或1次不是這種符號嗎EBNF用在BNF上面的符號 03/15 02:50
4F:→ mode1224:抱歉因為我的範例跟您打的有差異,所以還在理解 03/15 02:51
5F:推 ykjiang:? 是 EBNF 才加進來的東西... 03/15 02:58