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] .
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 [ "*" | "-" ].
Lenguajes de programación | |
---|---|
|