semilla7 | |
---|---|
Semántica | imperativo , orientado a objetos |
clase de idioma | lenguaje de programación , lenguaje de programación orientado a objetos y lenguaje de programación multiparadigma |
tipo de ejecución | intérprete , compilador |
Apareció en | 2005 |
Autor | Tomas Mertes |
extensión de archivo | .sd7o.s7i |
Liberar |
|
sistema de tipos | estricto , estático |
sido influenciado | Ada , C / C++ , Java |
Licencia | GNU GPL y GNU LGPL |
Sitio web | seed7.sourceforge.net |
sistema operativo | multiplataforma |
Seed7 es un lenguaje de programación de propósito general.
La característica principal del lenguaje es su extensibilidad. La sintaxis del idioma se define en una de las bibliotecas y el usuario puede cambiarla.
El lenguaje es sintácticamente similar a Pascal y Ada . Además de Pascal estándar y versiones anteriores, Ada incluye mecanismos de programación orientados a objetos , así como mecanismos de extensión del lenguaje: un potente motor de plantillas para definir nuevas construcciones de sintaxis (que, como Camlp4incluye herramientas que te permiten establecer la asociatividad y la precedencia de las operaciones ) y algo así como funciones estándar que te permiten establecer la semántica de tales construcciones. Estas funciones en tiempo de compilación toman variables , tipos y expresiones incluidas en las construcciones de sintaxis como parámetros y realizan las transformaciones necesarias en ellos. Si la gramática así definida es ambigua, se genera un error de compilación [2] .
Thomas Mertes comenzó a desarrollar este lenguaje mientras estudiaba en la Universidad Técnica de Viena [3] . Se convirtió en 1984 en el tema de su tesis [4] y luego, en 1986, en su disertación [5] .
Esto define un procedimiento (una función sin parámetros) main(desempeñando el mismo papel que en el lenguaje C ).
números de Fibonacci const func entero: fib (en entero: num1) es func resultado var entero: fib es 1; empezar si num1 <> 1 y num1 <> entonces fib := fib(pred(num1)) + fib(num1 - 2); terminara si; función final;La palabra clave inantes de declarar un parámetro de función significa que este parámetro es constante , no puede cambiar durante la ejecución de la función, para declarar parámetros mutables agregará la palabra inout. Después de la palabra result, se declara una variable, cuyo valor será devuelto por la función. La palabra se utiliza para declarar variables locales local.
Las extensiones de lenguaje incluyen dos pasos principales: la definición sintáctica, que proporciona una plantilla para la nueva forma sintáctica, y la función estándar de Seed7 para definir la semántica [2] .
Una parte del lenguaje denominada Descripción de sintaxis estructurada de Seed7 (S7SSD) se utiliza para definir la sintaxis. S7SSD expresiones de la forma
$expresión de sintaxis: .(). + .() es -> 7;define la sintaxis de la operación + La flecha derecha ->describe la asociatividad : vincular operandos de izquierda a derecha. El número 7especifica la prioridad de la operación + . Plantilla de sintaxis: .(). + .()separados por caracteres de punto ( .). Si los omite, se verá como un () + ()Símbolo () - no terminal, pero + - terminal. S7SSD no distingue entre diferentes símbolos no terminales , sino que solo se utiliza un símbolo no terminal: ().
La definición de un operador +para números complejos es solo una definición de función:
const func complejo: (en complejo: sumando1) + (en complejo: sumando2) es func resultado var complejo: suma es complejo.valor; empezar suma.re := sumando1.re + sumando2.re; suma.im := sumando1.im + sumando2.im; función final;Seed7 utiliza un modelo de programación orientado a objetos basado no en clases y métodos , sino en interfaces e implementaciones.
Disponible como código fuente bajo licencias GPL y LGPL o compilaciones listas para usar para Windows . El paquete incluye un intérprete (archivo s7) y un compilador ( s7c) que genera código intermedio en lenguaje C.