2015-09-07 67 views
0

在學校,我們一直在研究元語言,特別是鐵路圖和EBNF。我收到一個問題,在EBNF中描述了一個虛構的編程語言(winston)。那就是:虛構語言的EBNF語法

Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
LCase = a | b | c | d 
UCase = A | B | C | D | E | F | G | H | I | J 
Operator = + | - | * |/
Logical = < | > | <= | >= | <> 
Constant = [-] <Digit>{<Digit>} 
Identifier = <UCase>{<LCase> | <Digit>} 
Assignment = Set <Identifier> to <Constant> | <Identifier 
        {<Operator>(<Constant> | <Identifier>)} 
Condition = <Identifier> <Logical> (<Identifier> | <Constant>) 
        {(and | or) <Identifier> <Logical> (<Identifier> | <Constant>)} 
When = (<Assignment> | <Condition> {<Assignment> | <Condition>}) 
Statement = <Input> | <Output> | <Assignment> | <Condition> | <When> | <Pretest> | <Posttest> 
Program = Start <Statement> {! <Statement>} Stop 

下面編寫的程序與溫斯頓製作,但不正確執行。使用EBNF描述來識別錯誤。

Start 
Input J1 
Input J2 
When (J1 = J2, Set A3 to 0), (J1 < J2, Set A3 to -1), Set A3 to 1 
Output A3 
Stop 

我迄今爲止的工作:對我來說,這似乎是程序合法。這是一個程序,所以如果必須從「開始」開始並以「停止」結束,它就是這樣做的。看似中間的陳述被允許在那裏。有人能指引我朝着正確的方向嗎?

而且,誰能告訴我這是什麼意思在程序的EBNF描述這意味着什麼:<statement>

我認爲,這意味着像報表時,如果但是我也不太清楚。感謝您的幫助:)

回答

1

When用逗號分隔,語法根本不指定逗號。

J1 = J2 - 有在語法沒有=比較運算(見Logical),所以J1 = J2既不Assignment,也不Condition,因此是無效的。

<statement> - 語法將符號放在右側的尖括號中,例如, Identifier在左邊,然後在<Identifier>Assignment規則 - 這看起來不像是有效的EBNF

+0

謝謝,你能告訴我什麼是'!! '在EBNF描述中(在'program'中查找) –

+0

'!'in' {! }'看起來像一個語句分隔符。 – rns