簡體   English   中英

無上下文語法定義中的可選與強制終止符

[英]Optional vs. mandatory terminators in context-free grammar definition

在關於編譯器的書籍章節中,有以下語法定義和示例代碼。

...
statement: whileStatement
           | ifStatement
           | ... // Other statement possibilities
           | '{' statementSequence '}'
whileStatement: 'while' '(' expression ')' statement
ifStatement: ... // Definition of "if"
statementSequence: '' // empty sequence (null)
                   | statement ';' statementSequence
expression: ... // Definition of "expression"
...             // More definitions follow

while (expression) {
 statement;
 statement;
 while (expression) {
  while(expression)
     statement;
  statement;
 }
}

如何為代碼的最內側while循環有效,而不{ } 在我看來,語句定義需要它們。 這是書中的錯誤還是我誤解了語法?


[編輯]我對任何含糊不清表示歉意。 上面輸入的所有內容都是從書中逐字記錄下來的。 遺漏不是我的行為。

你同時聲明說,以后)來聲明。 您的語法沒有完全指定statement ,但它不需要大括號。 只有語句序列才需要大括號。

再次考慮您的示例代碼:

1 while (expression) {
2  statement;
3  statement;
4  while (expression) {
5   while(expression)
6      statement;
7   statement;
8  }
9 }

你為什么擔心第6行沒有括號,但是不在乎第2,3和7行也缺少它們? 語法是說while循環以statement結束,而statementSequence及其必需的大括號只是statement的許多替代方案之一。 第5行和第6行完全匹配該規則 - 除了';' ,在規則中沒有位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM