Modula2 vs Oberon, страница 4
Описание файла
PDF-файл из архива "Modula2 vs Oberon", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
И вновь этот процесс был вызван стремлением к упрощению иобобщению. Различия между исходной версией [8] и пересмотренной версией [9] следующие.1.Описательная и исполнительная части модуля слиты воедино. Это вызвано желаниемиметь спецификацию модуля с точки зрения программиста и с точки зрения компиляторав виде одного документа. Спецификация интерфейса для клиентов модуля (описательнаячасть) может быть получена автоматически.
Объекты, ранее описываемые в описательнойчасти (и еще раз встречающиеся в исполнительной части), помечаются специальнымзначком экспорта. Таким образом, отпадает необходимость компилятору проводитьструктурное сопоставление двух текстов.2.Синтаксис списка типов параметров в описании процедурного типа выглядит точно также,как и для заголовков обычных процедур. Из этого следует, что вводятся фиктивныеидентификаторы; они могут быть полезны в качестве комментариев.3.Ослаблены правила обязательного следования описания типов только после описанияконстант и описания переменных только после описания типов.4.Апостроф более не является разграничителем строк.5.Ослабленное правило совместимости параметров для формального типа ARRAY OF BYTEприменимо только к параметрам, передаваемым по ссылке.ИтогиЯзык Oberon возник из языка Modula-2 и вобрал в себя опыт многих лет программирования наModula. Было удалено значительное количество языковых средств.
Они в большей степениусложняли язык и компилятор, нежели представляли истинную силу и гибкость выразительныхвозможностей. Было добавлено небольшое число новых механизмов, наиболее важным изкоторых является концепция расширения типа.Эволюция нового языка, который стал гораздо меньше и при этом еще мощнее, чем егопредшественник, резко контрастирует с общепринятой практикой и в то же время имеетнеоценимые преимущества. Помимо более простых компиляторов, результатом этого сталолаконичное описание [9] — необходимое условие для любого инструмента, который долженслужить для построения изощренных и надежных систем.МИР ПК – ДИСК.
2003. № 8. СТУДИЯ ПРОГРАММИРОВАНИЯ9/12ИСКУССТВО ПРОГРАММИРОВАНИЯАВГУСТ 2003БлагодарностиПросто невозможно поблагодарить всех тех, кто так или иначе подпитывал своими идеями то, чтотеперь называется Oberon. Большинство идей пришло от использования и изучениясуществующих языков, таких как Modula-2, Ada, Smalltalk и Cedar, которые часто предостерегалинас от того, как не надо делать. Особых слов благодарности достоин первый пользовательOberon — Юрг Гуткнехт (J. Gutknecht). Автор признателен за его настойчивость в деле изъятияотмерших средств и подведения основательного математического фундамента под оставшиесямеханизмы.
И, наконец, хочется выразить свою признательность моим анонимным рецензентам,кто очень внимательно прочитал рукопись и внес весьма ценные замечания для улучшения этойстатьи.ПРИЛОЖЕНИЕСинтаксис языка Oberonident = letter {letter | digit}.number = integer | real.integer = digit {digit} | digit {hexDigit} «H».real = digit {digit} «.» {digit} [ScaleFactor].ScaleFactor = («E» | «D») [«+» | «-»] digit {digit}.hexDigit = digit | «A» | «B» | «C» | «D» | «E» | «F».digit = «0» | «1» | «2» | «3» | «4» | «5» | «6» | «7» | «8» | «9».CharConstant = “«“ character “«“ | digit {hexDigit} «X».string = “«“ {character} “«“ .identdef = ident [«*»].qualident = [ident «.»] ident.ConstantDeclaration = identdef «=» ConstExpression.ConstExpression = expression.TypeDeclaration = identdef «=» type.type = qualident | ArrayType | RecordType | PointerType | ProcedureType.ArrayType = ARRAY length {«,» length} OF type.length = ConstExpression.RecordType = RECORD [«(« BaseType «)»] FieldListSequence END.BaseType = qualident.FieldListSequence = FieldList {«;» FieldList}.FieldList = [IdentList «:» type].IdentList = identdef {«,» identdef}.PointerType = POINTER TO type.ProcedureType = PROCEDURE [FormalParameters].VariableDeclaration = IdentList «:» type.designator = qualident {«.» ident | «[« ExpList «]» | «(« qualident «)» | «^» }.МИР ПК – ДИСК.
2003. № 8. СТУДИЯ ПРОГРАММИРОВАНИЯ10/12ИСКУССТВО ПРОГРАММИРОВАНИЯАВГУСТ 2003ExpList = expression {«,» expression}.expression = SimpleExpression [relation SimpleExpression].relation = «=» | «#» | «<« | «<=» | «>» | «>=» | IN | IS.SimpleExpression = [«+»|«-»] term {AddOperator term}.AddOperator = «+» | «-» | OR .term = factor {MulOperator factor}.MulOperator = «*» | «/» | DIV | MOD | «&» .factor = number | CharConstant | string | NIL | set |designator [ActualParameters] | «(« expression «)» | «~» factor.set = «{« [element {«,» element}] «}».element = expression [«..» expression].ActualParameters = «(« [ExpList] «)».statement = [assignment | ProcedureCall |IfStatement | CaseStatement | WhileStatement | RepeatStatement |LoopStatement | WithStatement | EXIT | RETURN [expression] ].assignment = designator «:=» expression.ProcedureCall = designator [ActualParameters].StatementSequence = statement {«;» statement}.IfStatement = IF expression THEN StatementSequence{ELSIF expression THEN StatementSequence}[ELSE StatementSequence] END.CaseStatement = CASE expression OF case {«|» case}[ELSE StatementSequence] END.case = [CaseLabelList «:» StatementSequence].CaseLabelList = CaseLabels {«,» CaseLabels}.CaseLabels = ConstExpression [«..» ConstExpression].WhileStatement = WHILE expression DO StatementSequence END.RepeatStatement = REPEAT StatementSequence UNTIL expression.LoopStatement = LOOP StatementSequence END.WithStatement = WITH qualident «:» qualidentDO StatementSequence END.ProcedureDeclaration = ProcedureHeading «;» ProcedureBody ident.ProcedureHeading = PROCEDURE [«*»] identdef [FormalParameters].ProcedureBody = DeclarationSequence [BEGIN StatementSequence] END.ForwardDeclaration = PROCEDURE «^» ident [«*»] [FormalParameters].DeclarationSequence = {CONST {ConstantDeclaration «;»} |TYPE {TypeDeclaration «;»} | VAR {VariableDeclaration «;»}}{ProcedureDeclaration «;» | ForwardDeclaration «;»}.FormalParameters = «(« [FPSection {«;» FPSection}] «)» [«:» qualident].FPSection = [VAR] ident {«,» ident} «:» FormalType.FormalType = {ARRAY OF} (qualident | ProcedureType).МИР ПК – ДИСК.
2003. № 8. СТУДИЯ ПРОГРАММИРОВАНИЯ11/12ИСКУССТВО ПРОГРАММИРОВАНИЯАВГУСТ 2003ImportList = IMPORT import {«,» import} «;» .import = ident [«:=» ident].module = MODULE ident «;» [ImportList] DeclarationSequence[BEGIN StatementSequence] END ident «.» .Литература[1]Wirth N. (1982) Programming in Modula-2 // Springer-Verlag.[2]Gutknecht J., Wirth N. (1989) The Oberon System // Software — Practice andExperience, Vol.19, No.9, p.857-893.[3]Wirth N. (1988) Type Extensions // ACM Transactions on Programming Languagesand Systems, Vol.10, No.2, p.204-214.[4]Birtwistle G. et al.
(1973) Simula Begin // Auerbach.[5]Goldberg A., Robson D. (1983) Smalltalk-80: The Language and its Implementation //Addison-Wesley.[6]Tesler L. (1985) Object Pascal Report // Structured Language World, Vol.9, No.3, p.10-14.[7]Stroustrup B. (1986) The Programming Language C++ // Addison-Wesley.[8]Wirth N. (1988) The programming language Oberon // Software — Practice andExperience, Vol.18, No.7, p.671-690.[9]Wirth N. (1990) The programming language Oberon (Revised Report) // ETH.МИР ПК – ДИСК.
2003. № 8. СТУДИЯ ПРОГРАММИРОВАНИЯ12/12.