2013-09-23 172 views
0

編寫一個簡單的BNF語法的C子集,支持多條語句,包括分配,如果其他,和while語句無遮擋的語句。爲你的非終結者使用有意義的名字(與神祕字母相比)。假設變量由單個字母表示並且是整數。假設標準優先規則適用於運算符*,/,+, - 和括號。確保包括關係運算符(==,!=,<,>,> =,和< =)。以下是你的語法有效的程序:BNF語法使用循環語句

a = -35;while (b > a);a = a + b;if (a >= 10);c = a;else c = b; 

您可以擴展BNF妥善處理一個C塊語句作爲一個同時的一部分,或者如果要不?修改您的製作以支持: 而(B> A) A = A + B; 的printf(「環路」);使用

我想出了

<statement> ::= a=-35 
<while> ::= while (b>a) 
<assign>::= a = a + b; 
<if>::= if (a >= 10) 
<assign> ::= c=a; 
<else> 
<assign> ::= c = b; 

<while>::= while (b>a) 
<assign>:= a = a + b; 
<statement>::= printf ("in loop"); 

這是一個有效的BNF語法上面的語法?

+0

這功課嗎? – scravy

+0

@scravy顯然,這是家庭作業(還有誰,但老師會感興趣的「C BNF語法的一個子集」?)。問題不在於它是否是功課(爲什麼作業應該與工作任務不同),而是如果海報正在自己努力解決問題,或者他只是想要轉儲代碼。所以我主要以正確的方向回答一些線索(除非它是一個非常具體的問題)。 – SJuan76

回答

4

號你所書面方式比語法更多的例子。語法解釋瞭如何產生語言的所有有效結構。

例如

<while> ::= while <expression> <block> 

然後,你的方式,允許寫語言中的任何表達式定義<expression>,並<block>由方括號括起的語句塊(一個簡單的語句或幾個語句)。

http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form