La distinción entre expresiones primitivas, medios de combinación y medios de abstracción es útil al modelar lenguajes de programación. Tenga en cuenta que esta no es una propiedad intrínseca del lenguaje: no puede apuntar a ninguna definición de lenguaje y decir "esta característica es inequívocamente una expresión primitiva, esa característica es inequívocamente un medio de combinación". La distinción es una propiedad del modelo, y los modelos complejos pueden resistir la clasificación.
Un ejemplo de libro de texto de estos tres conceptos es el cálculo lambda , que tiene exactamente uno de cada uno:
- Las variables x , y , ... son las únicas expresiones primitivas.
- La aplicación de funciones MN es el único medio de combinación.
- La abstracción lambda λx.M es el único medio de abstracción.
Cuando accedes a idiomas con más funciones, el modelado puede volverse más ambiguo. En términos generales, una expresión primitiva es aquella que no se puede o no se descompone en componentes primitivos. Pero es como el átomo : es primitivo hasta que la ciencia avanza. Por ejemplo, hay una variante del cálculo lambda en la que las variables usan números en lugar de nombres ( índices de Bruijn ), lo cual es particularmente conveniente al modelar términos lambda para pruebas de computadora; y en pruebas de computadora, los enteros se dividen en partes constituyentes . Entonces, en estos modelos, las variables no son expresiones primitivas después de todo.
En (un modelo típico de) Java, las expresiones primitivas son principalmente constantes y variables. Los medios de combinación incluyen los numerosos operadores; más precisamente, "expresión aditiva" es un medio de combinación con dos ranuras (el lado izquierdo y el lado derecho), o con tres ranuras (los dos lados más el operador) si incluye A + B y A - B bajo ese nombre (en cuyo caso los operadores +y -serían construcciones primitivas por derecho propio). Otros medios de combinación incluyen secuencias de instrucción I ; J , construcciones de buclewhile (…) {…}, y así. Luego, tiene construcciones como declaraciones de variables, definiciones de funciones, definiciones de clase, etc., que son medios de combinación (combinan nombres y tipos de parámetros, cuerpos, inicializadores, ...) y medios de abstracción (porque definen nombres para reutilizar). De hecho, es bastante común que los medios de abstracción también sean medios de combinación: combinan un nombre con su definición.