Подчеркивая сказанное Гамбо.
Кроме того, если в языке есть реальная команда elif / elsif / elseif (скажем, «настоящая» инструкция else-if, а не какая-то вложенная цепочка, скрытая путем форматирования), то компилятор может легко создать один узел в абстрактном синтаксическом дереве (или аналогичном, см. http://en.wikipedia.org/wiki/Abstract_syntax_tree) вместо их вложения.
Чтобы привести пример:
Скажем, в C / C ++ у вас есть:
if (a) {
X
} else if (b) {
Y
} else if (c) {
Z
} else {
0
}
Затем компилятор создаст AST-узел следующим образом:
a
/ \
X b
/ \
Y c
/ \
Z 0
Но если у языка выбора есть реальное if-else:
if (a) {
X
} elif (b) {
Y
} elif (c) {
Z
} else {
0
}
Тогда AST могло бы выглядеть так:
(a--b--c)
/ / / \
X Y Z 0
На таком языке «если еще» будет возможно только в том случае, если фигурные скобки не являются обязательными:
if (a) {
X
} elif (b) {
Y
} else if (c) { // syntax error "missing braces" if braces mandatory
Z
} else {
0
}
Соответствующий AST (, если скобки не обязательны ):
(a--b)
/ / \
X Y c
/ \
Z 0
Это может сделать анализ CFG (http://en.wikipedia.org/wiki/Control_flow_graph) более легким для реализации (хотя в действительности не может быть никакой выгоды от оптимизации; так что, imho, это только выиграет для ленивого программиста: D).