Oberón-2

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 17 de marzo de 2021; las comprobaciones requieren 2 ediciones .
Oberón-2
clase de idioma imperativo , estructurado , modular , orientado a objetos
Apareció en 1991
Autor Niklaus Wirth , Hanspeter Mössenböck
sistema de tipos estático , fuerte
sido influenciado Oberón
influenciado Componente Pascal , Ir

Oberon-2 ( Oberon-2 ): una extensión del lenguaje de programación Oberon con elementos de metaprogramación ( reflexión limitada ) y herramientas para programación orientada a objetos, también se agregaron matrices abiertas y tipos de punteros básicos, campos disponibles para exportación de solo lectura, FOR operador de Modula-2 .

Desarrollado en 1991 en ETH Zurich por Niklaus Wirth y Hanspeter Mössenböck como una reelaboración de Object Oberon. Oberon-2 es un conjunto ampliado de Oberon y es totalmente compatible con él.

Principales adiciones:

Existe un compilador optimizador XDS [3] para Oberon-2; también hay un compilador de lenguaje para el código de bytes de Java [4] .

Sintaxis

La familia de lenguajes Algol  - Pascal  - Modula-2  - Oberon  - Oberon-2 - Component Pascal ha evolucionado en la dirección de reducir la complejidad de la sintaxis . Al mismo tiempo, a pesar de la expansión del lenguaje, el volumen de la descripción formal de la sintaxis de Oberon-2 es menor que la del Oberon clásico debido a la optimización de la descripción: la sintaxis completa se describe en solo 33 oraciones en la forma extendida de Backus-Naur [5] :

Módulo = ID de MÓDULO ";" [ ImportList ] Último declarado [ BEGIN Últimas declaraciones ] END id "." . ImportList = IMPORTAR [ id ":=" ] id { "," [ id ":=" ] id } ";" . LastDeclared = { CONST { DeclaredConst ";" } | TIPO { declaración de tipo ";" } | VAR { VarDeclarado ";" }} { ProcDeclarado ";" | Reenviar declarado ";" }. DeclaredConst = IdentDef "=" ConstExpression . TypeDeclare = IdentDef "=" Tipo . VarDeclarada = ListIdentifier ":" Tipo . DeclaredProc = PROCEDIMIENTO [ Receptor ] IdentDef [ FormalParam ] ";" Última declaración [ BEGIN Últimas declaraciones ] END Ident . ForwardDeclare = PROCEDIMIENTO "^" [ Receptor ] IdentDef [ FormalParam ]. FormalParam = "(" [ Sección FP { ";" Sección FP }] ")" [ ":" SpecIdent ]. SectionFP = [ VAR ] id { "," id } ":" Tipo . Receptor = "(" [ var ] id ":" id ")" . Tipo = ID de calidad | ARRAY [ ConstExpression { "," ConstExpression }] OF Tipo | RECORD [ "(" QualIdent ")" ] FieldList { ";" Lista de campos } FIN | PUNTERO A Tipo | PROCEDIMIENTO [ FormalParam ]. FieldList = [ ListIdent ":" Tipo ]. AfterOperators = Operador { ";" El operador }. Operador = [ Notación ":=" Expresión | Notación [ "(" [ ExpresiónDeLista ] ")" ] | IF Expr THEN Sentencia Seq { ELSIF Expr THEN Sentencia Seq } [ ELSE Sentencia Seq ] FIN | CASO Expresión OF Opción { "|" Variante } [ ELSE SentenciaSeq ] FIN | WHILE Express DO Instrucción Seq END | REPETIR SentenciaSeq HASTA Expresión | FOR ident ":=" Express TO Express [ BY Const Express ] DO StatementSeq END | LOOP AfterStatements FIN | CON Guard DO Sentencia Secuencia { "|" Guard DO SentenciaSeq } [ ELSE SentenciaSeq ] END | SALIR | RETORNO [ Expreso ] ]. Opción = [ Etiquetas de opción { "," Etiquetas de opción } ":" Última declaración ]. VariantLabels = ConstExpression [ ".." ConstExpression ]. Guard = SpecId ":" SpecId . ConstExpression = Express . Expresión = ExpresiónSimple [ Relación ExpresiónSimple ]. ExpresiónSimple = [ "+" | "-" ] Plazo { Término de OperSlog }. Término \ u003d Multiplicador { OperMul Multiplier }. Multiplicador = Notación [ "(" [ ExpresiónDeLista ] ")" ] | número | símbolo | cadena | NULO | Conjunto | "(" Expresión ")" | " ~ " Multiplicador . Conjunto = "{" [ Elemento { "," Elemento }] "}" . Elemento = Expresar [ ".." Expresar ]. Relación = "=" | "#" | "<" | "<=" | ">" | ">=" | EN | ES . OperSlog = "+" | "-" | O . OperUmn = "*" | "/" | DIV | MOD | "&" . Designación = Calificador { "." identificación | "[" ExpresiónLista "]" | "^" | "(" QualIdent ")" }. ListExpr = Expresión { "," Express }. ListIdent = IdentDef { "," IdentDef }. QualID = [ identificador "." ] identificación . IdentDef = ident [ "*" | "-" ].

Notas

  1. Lenguaje de programación Oberon-2 Archivado el 28 de marzo de 2022 en Wayback Machine , H. Mössenböck, N. Wirth
  2. A Description of the Oberon-2 Language por Paul Floyd Archivado el 5 de septiembre de 2012 en Wayback Machine . 
  3. Familia de productos XDS (enlace no disponible) . Consultado el 18 de agosto de 2012. Archivado desde el original el 23 de agosto de 2011. 
  4. Compilador Oberon-2 para máquina virtual Java ([[Máquina virtual Java]]) bytecode . Consultado el 20 de abril de 2022. Archivado desde el original el 30 de septiembre de 2021.
  5. H. Mössenböck, N. Wirth, 1993 (enlace inaccesible) . Consultado el 21 de agosto de 2012. Archivado desde el original el 2 de marzo de 2010.