作者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