Semilla7

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 13 de agosto de 2019; las comprobaciones requieren 4 ediciones .
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.

Características

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] .

Historia

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] .

Ejemplos

Hola Mundo $ incluye "semilla7_05.s7i"; const proc: principal es función empezar writeln("hola mundo"); función final;

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.

Mecanismos de extensión

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] .

Definición de sintaxis

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: ().

Definición de semántica

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;

Programación orientada a objetos

Seed7 utiliza un modelo de programación orientado a objetos basado no en clases y métodos , sino en interfaces e implementaciones.

Implementación

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.

Véase también

Notas

  1. https://sourceforge.net/p/seed7/news/2022/07/new-seed7-release-2022-07-24/ - 2022.
  2. 1 2 Daniel Zíngaro. Lenguajes extensibles modernos → 8 Otros lenguajes extensibles → 8.2 Seed7 . - Hamilton, Ontario, Canadá: McMaster University, 11 de abril de 2007. - Pág. 16 .
  3. Entwurf einer erweiterbaren höheren Programmiersprache Archivado desde el original el 5 de febrero de 2012.  (Alemán) , Thomas Mertes, 1984, Diplomarbeit, Institut für Computersprachen Programmiersprachen und Übersetzer
  4. Definición einer erweiterbaren höheren Programmiersprache Archivado el 9 de mayo de 2013.  (Alemán) , Thomas Mertes, 1986, Disertación, Institut für Computersprachen Programmiersprachen und Übersetzer

Literatura

Enlaces