作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一本书关于编译器的章节中,有如下语法定义和示例代码。
...
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
循环如何有效?在我看来,语句定义需要它们。这是书中的错误还是我误解了语法?
[编辑] 对于任何歧义,我深表歉意。上面输入的所有内容都是书中逐字逐句的。遗漏不是我做的。
最佳答案
再次考虑您的示例代码:
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
及其所需的大括号只是众多替代方案之一语句
。第 5 行和第 6 行完全匹配该规则——除了 ';'
,它在规则中没有位置。
关于language-agnostic - 上下文无关语法定义中的可选与强制终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395822/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!