10
« : Апрель 22, 2011, 02:26:38 pm »
Сейчас в языке Oberon-07 последнее поле в записи не должно заканчиваться символом ";".
Например, RECORD a: INTEGER; b: INTEGER END - можно, а RECORD a: INTEGER; b: INTEGER; END - нельзя.
Это следует из синтаксиса языка:
RecordType = "RECORD" ["(" BaseType ")"] [FieldListSequence] "END".
BaseType = qualident.
FieldListSequence = FieldList {";" FieldList}.
FieldList = IdentList ":" type.
IdentList = identdef {"," identdef}.
Мне кажется, что это не всегда удобно, так как если, например, в структуре 10 полей, то последовательно добавляя поля, нужно всегда иметь в виду, что последнее поле не должно заканчиваться символом ";". Если случайно добавить этот символ, то будет ошибка компиляции. А если изначально было все правильно, а затем пришлось добавить еще несколько полей, то можно забыть поставить символ ";" после десятого поля.
В Компонентном Паскале точка с запятой после последнего поля не вызывает ошибку, это следует из синтаксиса.
Type = Qualident
| ARRAY [ConstExpr {"," ConstExpr}] OF Type
| [ABSTRACT | EXTENSIBLE | LIMITED]
RECORD ["("Qualident")"] FieldList {";" FieldList} END
| POINTER TO Type
| PROCEDURE [FormalPars].
FieldList = [IdentList ":" Type].
Кто как думает, почему в Oberon-07 нельзя ставить точку запятой после последнего поля, есть ли здесь какое-то скрытое рациональное зерно?
Нужно ли изменять синтаксис языка Oberon-07M чтобы можно была ставить точку с запятой после последнего поля?