2011-06-07 166 views
2

我正在嘗試爲某些算術表達式創建適當的語法。我的表達式的有效標記如下:算術表達式語法

'+', '-', '/', '*''**'冪。表達式還可以包含符號和函數。這些函數可以有多個參數,其中一些可能是可選的。從我從表達式解析中記得的很少,我必須想出一個不是左遞歸的語法,並且還保留了操作符關聯性。

因此,這裏是我想出了,搜索(雖然不知道關聯)的一點點後:

E = T Eopt 
Eopt = '+' T Eopt | '-' T Eopt | ε 
T = F Topt 
Topt = '*' F Topt | '/' F Topt | ε 
F = Number | '(' E ')' 

可以在很多教科書中找到。上述語法需要做什麼修改,以便它可以修改權力標記('**')以及符號和函數?

請不要指向我flex/yacc等謝謝。

回答

1

你快到了。變化開始於F:

E = T Eopt 
Eopt = '+' T Eopt | '-' T Eopt | ε 
T = F Topt 
Topt = '*' F Topt | '/' F Topt | ε 
F = P Fopt 
Fopt = '**' P Fopt | ε 
P = Number | '(' E ')' 

這裏假設你的標記生成器被***區分。

+0

P應該適應符號和函數嗎? – John 2011-06-07 16:21:51

+1

@John:是的。添加... | ID | ID'('')'| ID'('args')'給P;添加新規則ARGS =表達式| ARGS','表達; – 2011-06-07 17:14:07