2011-03-09 70 views
0

你會如何得出這個表達式?我需要爲此繪製一個解析樹,但是導致這一點真的很麻煩。谷歌搜索沒有給出任何有用的鏈接,任何幫助將不勝感激,但請給出一個簡單的解釋,你是如何做到這一點的,因爲我沒有其他人可以自己做。是否「|」代表「或」運算符就像在編程中一樣?派生一個算術表達式?

< exp> ---> < exp> * < factor> | < factor> 
< factor> ---> < factor> - < term> | < term> 
< term> ---> x | y | z 

這是我能拿出最好的,我完全失去了..

< exp> ---> < exp> * < factor> 
---> x * < factor> 
---> x * < factor> * < factor> 
+2

參加ASCII藝術代數課程? –

+3

聽起來像作業。 –

+0

您是否需要一個適合該語法的具體示例以形成它的解析樹? – Orbling

回答

0

要回答你的問題|用於表示編程中的或類似的東西。你發佈的語法看起來像它的優先級是關閉的。通常乘法比加法具有更高的優先級,但是您發佈的語法有相反的結果,這可能是您的問題的一部分。

的常用方法權利的表達式語法(在您的示例組有限的操作)是

expression = expression+ term 
      | term 
term  = term * factor 
      | factor 
factor  = x 
      | y 
      | z 

這樣,你的增加之前做乘法。對於x + y * z,您將擁有以下內容。我不會做ASCII藝術,所以你必須用運算符而不是逗號作爲分隔符來解決S-expressions

((表達式(期限(X因子))) '+'(期限(要素Y) '*'(因子Z)))

1

是的,|是或,就像在常規編程中一樣。像A線:

< exp> ---> < exp> * < factor> | < factor> 

意味着東西可以是< exp>如果它是一個形式< exp> * < factor>的或者如果它是一個< factor>

看你的全語法:

< exp> ---> < exp> * < factor> | < factor> 
< factor> ---> < factor> - < term> | < term> 
< term> ---> x | y | z 

x - y * x - y - y * z的表達能夠在傳球被建立如下:

x  y  x   y  y  z 
<term> - <term> * <term> - <term> - <term> * <term> 
<factor>  * <factor> - <term> - <term> * <factor> 
<factor>  * <factor>   - <term> * <factor> 
<expr>   * <factor>     * <factor> 
<expr>          * <factor> 
<expr> 

逆轉爲了得到解析:

  e 
     /|\ 
     /| \ 
     e * f 
     /|\  \ 
    /| \  t 
    /| \  \ 
/ | \  z 
    e * f 
    |  /|\ 
    f  /| \ 
/|\  f - t 
f - t /|\ | 
| | f - t y 
t y | | 
|  t y 
x  | 
     x 

(該圖表比我所期待的繪製更多的作品...)