Только что напоролся на один нюанс, который раньше замечен не был. Вот такой код, с точки зрения грамматики Oberon'a не валиден оказывается:
MODULE B;
IMPORT A;
TYPE
Boo = A.Foo;
END B.
Конкретно не валидно вот это:
Boo = A.Foo
Справа тут может быть только StructType:
StrucType = ArrayType | RecordType | PointerType | ProcedureType.
ArrayType = ARRAY length {"," length} OF type.
RecordType = RECORD ["(" BaseType ")"] [FieldListSequence] END.
PointerType = POINTER TO type.
ProcedureType = PROCEDURE [FormalParameters].
Ибо:
TypeDeclaration = identdef "=" StrucType.
DeclarationSequence = [CONST {ConstDeclaration ";"}]
[TYPE {TypeDeclaration ";"}]
[VAR {VariableDeclaration ";"}]
{ProcedureDeclaration ";"}.
И никак не может быть qualident:
qualident = [ident "."] ident
Вот такие пироги.