Sintaxis de Lenguaje

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 21

UNIVERSIDAD TÉCNICA

DE MANABÍ

FACULTAD DE CIENCIAS INFORMÁTICAS

Integrantes:

Bernardi Espín Oscar

Casanova Sabando José

Mora Reyna Ginger

Asignatura:

Programación Avanzada “A”

Docente:

Ing. Hernan Vargas

Ensayo

Ciclo:

Mayo – septiembre 2021


Introducción
Con el siguiente ensayo vamos a poder obtener más conocimiento sobre programación ya
que vamos a investigar sobre Fundamentos de programación y lenguajes.

En el marco teórico desarrollamos temas y subtemas con sus respectivos conceptos para
poder comprender a profundidad los conceptos, características e implementación de
lenguajes de la programación, como son algunos tipos de lenguajes que se manejan
diferente sintaxis y semántica.

Para poder ampliar nuestros conocimientos de cada uno de los lenguajes es necesario
profundizar y entender su traducción y ejecución, comparando su interpretación y
compilación como es a código nativo o representación portable intermedia. También los
sistemas básicos con conjunto de valores o conjunto de operaciones. Como estos se
asocian con las variables, sus argumentos, resultados y campos, más su tipo de seguridad,
errores causados por el uso de valores de manera incompatible dadas sus tipos previstos.

Análisis de los lenguajes ascendente y descendente, su semántica, fases, ejemplos de


comprobación las concurrencias y paralelismo, como nos benefician, cuáles son sus
diferencias, fundamentos, sus arquitecturas y paradigmas de programación.
Marco Teórico
1. CONCEPTOS E IMPLEMENTACIÓN DE LENGUAJES.

A. Lenguaje, programación, lenguaje de programación

Lenguaje

El lenguaje es nuestro principal medio de comunicación y es el que permite que


interactuemos entre humanos, así ha sido siempre. Por ejemplo, para una sociedad
humana, el lenguaje contiene los elementos necesarios que permite a las personas
comunicarse. Estos elementos pueden ser palabras, señas o sonidos que en sí
mismos son abstractos, sin embargo, para las personas que forman parte de la
sociedad, tienen un sentido, expresan un significado y señalan objetos o acciones.
Así es como se logra la comunicación entre ellos.

Programación

La programación es el proceso de creación de programas informáticos. Esta


definición se puede interpretar de la siguiente manera. La programación no es más
que una explicación a la computadora de qué, en qué forma y cómo llegar al
usuario. En otras palabras, es una especie de arte de traducir los deseos de una
persona al lenguaje de la máquina.

Lenguaje de programación

En términos generales, un lenguaje de programación es una herramienta que


permite desarrollar software o programas para computadora. Los lenguajes de
programación son empleados para diseñar e implementar programas encargados
de definir y administrar el comportamiento de los dispositivos físicos y lógicos de
una computadora. Lo anterior se logra mediante la creación e implementación de
algoritmos de precisión que se utilizan como una forma de comunicación humana
con la computadora.

A grandes rasgos, un lenguaje de programación se conforma de una serie de


símbolos y reglas de sintaxis y semántica que definen la estructura principal del
lenguaje y le dan un significado a sus elementos y expresiones.

La función principal de los lenguajes de programación es escribir programas que


permiten la comunicación usuario-máquina. Unos programas especiales
(compiladores o intérpretes) convierten las instrucciones escritas en código
fuente, en instrucciones escritas en lenguaje máquina (0 y 1).

Los intérpretes leen la instrucción línea por línea y obtienen el código máquina
correspondiente.

En cuanto a los compiladores, traducen los símbolos de un lenguaje de


programación a su equivalencia escrito en lenguaje máquina (proceso conocido
como compilar). Por último, se obtiene un programa ejecutable.

Tipos de lenguaje (bajo, alto), léxico, sintaxis, semántica

Un lenguaje de bajo nivel es trasladado fácilmente a lenguaje de máquina (la palabra bajo
se refiere a la abstracción reducida entre el lenguaje y el hardware).
Y los lenguajes de programación de alto nivel se caracterizan por expresar los programas
de una manera sencilla.

Lenguajes de bajo nivel

Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna


abstracción del microprocesador de una computadora. Consecuentemente, su trasladado
al lenguaje máquina es fácil. El término ensamblador (del inglés assembler) se refiere a
un tipo de programa informático encargado de traducir un archivo fuente, escrito en un
lenguaje ensamblador, a un archivo objeto que contiene código máquina ejecutable
directamente por la máquina para la que se ha generado.

Lenguaje de alto nivel

Los lenguajes de programación de alto nivel se caracterizan porque su estructura


semántica es muy similar a la forma como escriben los humanos, lo que permite codificar
los algoritmos de manera más natural, en lugar de codificarlos en el lenguaje binario de
las máquinas, o a nivel de lenguaje ensamblador.

B. Léxico, Sintaxis, Semántica

Léxico

A la primera fase de un compilador se le llama análisis de léxico o escaneo. El


analizador de léxico lee el flujo de caracteres que componen el programa fuente y
los agrupa en secuencias significativas, conocidas como lexemas. Para cada
lexema, el analizador léxico produce como salida un token de la forma:

( nombre-token, valor-atributo )

Sintaxis

La segunda fase del compilador es el análisis sintáctico o parsing. El parser


(analizador sintáctico) utiliza los primeros componentes de los tokens producidos
por el analizador de léxico para crear una representación intermedia en forma de
árbol que describa la estructura gramatical del flujo de tokens. Una representación
típica es el árbol sintáctico, en el cual cada nodo interior representa una operación
y los hijos del nodo representan los argumentos de la operación.

Semántico

El analizador semántico utiliza el árbol sintáctico y la información en la tabla de


símbolos para comprobar la consistencia semántica del programa fuente con la
definición del lenguaje. También recopila información sobre el tipo y la guarda,
ya sea en el árbol sintáctico o en la tabla de símbolos, para usarla más tarde durante
la generación de código intermedio.

Una parte importante del análisis semántico es la comprobación (verificación) de


tipos, en donde el compilador verifica que cada operador tenga operandos que
coincidan.

Ejemplo: posicion = inicial + velocidad * 60


60
2. Traducción y ejecución de lenguajes

A. Interpretación vs. compilación a código nativo vs. compilación de representación


portable intermedia.

Una interpretación es el proceso del código fuente de un proyecto de software durante su


tiempo de ejecución, es decir, mientras el software se está ejecutando, y actúa como
una interfaz entre ese proyecto y el procesador. Un intérprete siempre procesa el código
línea por línea, de modo que lee, analiza y prepara cada secuencia de forma consecutiva
para el procesador.

Al contrario de ello, una compilación de código nativo, nos permite o facilita obtener una
respuesta directa a una necesidad muy concreta, permitiendo explotar aún más el
rendimiento de las apps.

En diferencia de esto, una compilación de representación portable inmediata, es la forma


en la que se ejecutan, por ejemplo, las aplicaciones y lo que hace que puedan ejecutarse
en varias plataformas distintas. Este término hace referencia a la forma en que se convierte
el código intermedio a código binario para ser ejecutado por el procesador. Para acelerar
la ejecución, el compilador puede traducir todo o parte del código intermedio a código
nativo cuando se invoca a un programa. El código nativo obtenido suele almacenarse para
ser utilizado de nuevo cuando sea necesario.

B. Pipeline de traducción de lenguajes.

Cuando programamos en lenguajes de alto nivel, lo que estamos haciendo en realidad es


el código fuente de ese programa.

Este código fuente debe ser traducido a binario para que las instrucciones que contienen
puedan ser entendidas y ejecutadas por la máquina.
Para esto existe un programa encargado de realizar la traducción, llamado traductor del
lenguaje.
3. Sistemas de tipos.

A. Sistemas de tipos básicos. Tipos como conjunto de valores junto con un conjunto
de operaciones.

Existen diferentes sistemas de tipos básicos, en sí, son el complemento fundamental de la


programación, para ello, vamos a explayar algunos de ellos.

Los tipos como un conjunto de valores, nos referimos a un atributo que se indica al
computador respecto a la naturaleza de los datos que se dispone a procesar. Esto incluye
delimitar o restringir los datos, definir los valores que pueden tomar, qué operaciones se
puede realizar con ellos, etc.

En otro aspecto, una vez que se comprende el concepto de variable y/o constante, sus
correspondientes tipos de datos y las expresiones que pueden escribirse al combinar
operadores y operandos es posible realizar operaciones, es decir acciones que conduzcan
a disponer de variables con valores que pueden obtenerse ya sea por parte de los usuarios
de los programas o a su vez como resultado de la ejecución de una expresión.

B. Asociación de tipos de variables, argumentos, resultados y campos.

Una asociación es una relación establecida entre un identificador y una entidad en un


programa.

En algunos casos, una entidad puede tener más de un nombre (esto se denomina aliasing,
y se dice que el nombre nuevo es un alias del original). I En algunos casos un identificador
tener más de un significado, a esto se denomina sobrecarga. I Cuando hay sobrecarga, la
selección del significado de una aparición del identificador se realiza teniendo en cuenta
el contexto de dicha aparición. Por ahora supondremos que esto no ocurre.

En un programa dado, cada sentencia (cada vez que se ejecuta) y cada expresión (cada
vez que se evalúa) tienen asociado un entorno I El entorno de una sentencia o expresión
indica que identificadores se pueden usar en ella y que significado tienen.
4. SINTAXIS DE LENGUAJE

La sintaxis de un lenguaje de programación se define como el conjunto de reglas que


deben seguirse al escribir el código fuente de los programas para considerarse como
correctos para ese lenguaje de programación.

Análisis descendente

El análisis sintáctico descendente (ASD) intenta encontrar entre las producciones de la


gramática la derivación por la izquierda del símbolo inicial para una cadena de entrada.

(Top-Down-Parser): un analizador puede empezar con el símbolo inicial e intentar


transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada
progresivamente en partes cada vez más pequeñas, de esta forma funcionan los
analizadores LL.

El analizador sintáctico LL es un analizador sintáctico descendente, por un conjunto de


gramática libre de contexto. En éste analizador las entradas son de izquierda a derecha, y
construcciones de derivaciones por la izquierda de una sentencia o enunciado.

Análisis ascendente

Conocido como análisis sintáctico por desplazamiento y reducción. El análisis sintáctico


por desplazamiento y reducción intenta construir un árbol de análisis sintáctico para una
cadena de entrada que comienza por las hojas (el fondo) y avanza hacia la raíz (la cima).
Se puede considerar este proceso como de "reducir" una cadena w al símbolo inicial de
la gramática. En cada paso de reducción se sustituye una subcadena determinada que
concuerde con el lado derecho de una producción por el símbolo del lado izquierdo de
dicha producción y si en cada paso se elige correctamente la subcadena.

Ejemplo Considérese la gramática

1. S-> aABe 3. B->d


2. A-> Abc | b
La frase abbcde se puede reducir a S por los siguientes pasos:

1. abbcde 4. aABe
5. S
2. aAbcde
3. aAde
Diferencias entre el descendente y el ascendente
Análisis sintáctico descendente Análisis sintáctico ascendente

Se construye el árbol sintáctico de arriba Se construye el árbol sintáctico de abajo hacia arriba,
hacia abajo y se utiliza más reglas. lo cual disminuye el número de reglas mal aplicadas
con respecto al caso descendente.

5. SEMÁNTICA DE UN LENGUAJE

Describir la semántica de un lenguaje es describir cuál es el efecto que tiene cada


instrucción válida del mismo en ejecución. ¿Cómo ejecuta el SO un programa? ¿Qué
efectos tiene sobre la memoria? ¿Qué cambios se producen?  ¿Cómo entiende cuál es el
efecto de cada instrucción o su significado? La realidad es que solo se ejecutan órdenes
en lenguaje de máquina a muy bajo nivel.

Especificación de Semántica

La especificación formal de la sintaxis de un lenguaje se suele llevar a cabo mediante la


descripción estándar de su gramática en notación BNF, en el caso de la especificación
semántica la situación no está tan clara; no hay ningún método estándar globalmente
extendido. Una clasificación de los principales 6 métodos formales de descripción
semántica, así como una descripción muy breve de las ideas en las que se fundamentan,
es [Nielson92]

Fases

Semántica operacional: Los significados del programa son descritos en términos de


operaciones, utilizando un lenguaje basado en reglas de inferencia lógicas en las que se
describen formalmente las secuencias de ejecución de las diferentes instrucciones sobre
una máquina abstracta [Nielson92].

Semántica denotacional: La representación del comportamiento de cada sentencia o


frase del lenguaje se lleva a cabo mediante entidades matemáticas (denotación) que
representan el efecto de haber ejecutado las sentencia o frase asociada [Watt96].

Semántica axiomática: Especifica las propiedades del efecto de ejecutar las sentencias
sintácticamente correctas, expresadas mediante asertos, desoyendo así los aspectos de su
ejecución.
Semántica algebraica: Se basa en la especificación de tipos de datos abstractos mediante
una colección de operaciones (incluyendo alguna constante). Puesto que un conjunto de
valores al que se le añaden una colección de operaciones constituye un álgebra.

Semántica de acciones: Fue elaborado por Peter Mosses [Mosses91] para describir la
semántica de lenguajes de un modo más inteligible. Las especificaciones semánticas de
lenguajes siempre han sido consideradas como oscuras, complicadas y únicamente
legibles por expertos, adquiriendo así una mala reputación por su uso intensivo de
símbolos matemáticos.

Ejemplos de comprobación

Existen multitud de ejemplos reales de comprobaciones llevadas a cabo por el analizador


semántico de un procesador de lenguaje. Describiremos uno ellos a modo de ejemplo.

Ejemplo:

Analizábamos la siguiente sentencia en C: superficie = base * altura / 2. Si enmarcamos


la sentencia anterior en el siguiente programa C:

El primer printf es correcto, pero no el segundo. En el primer caso, todos los


identificadores de la asignación están declarados: superficie y altura (con valor 1) están
declarados en el ámbito actual (altura oculta al identificador con valor 10, puesto que está
más anidado) y el valor mostrado es 1.25. Sin embargo, el segundo printf no es correcto
puesto que la superficie del triángulo no ha sido declarada

4. CONCURRENCIA Y PARALELISMO.

Concurrencia es la tendencia de las cosas a producirse al mismo tiempo en un sistema.


La concurrencia es un fenómeno natural, por supuesto. En el mundo real, en un momento
dado, suceden muchas cosas de forma simultánea. Cuando se diseña software para
supervisar y controlar los sistemas del mundo real, hay que enfrentarse a esta
concurrencia natural. La concurrencia es la capacidad del CPU para procesar más de un
proceso al mismo tiempo, ¿simple no? Pero que implica esto realmente. Pues bien, para
comprender esto es necesario entender cómo funciona un procesador. Un procesador
puede procesar al mismo tiempo el mismo número de procesos que el número de CORES
que tiene, de esta forma, si un procesador tiene un CORE, entonces solo podrá ejecutar
un proceso a la vez, por otro parte, si tenemos 8 CORES, entonces podremos ejecutar
hasta 8 procesos al mismo tiempo.

Paralelismo: sigue la filosofía de “divide y vencerás”, ya que consiste en tomar un único


problema, y mediante concurrencia llegar a una solución más rápido. El paralelismo lo
que hace es tomar el problema inicial, dividir el problema en fracciones más pequeñas, y
luego cada fracción es procesada de forma concurrente, aprovechando al máximo la
capacidad del procesador para resolver el problema.

Beneficios y Diferencias

Beneficios de la programación concurrente

„ Mejor aprovechamiento de la CPU „ Tecnologías web

„ Velocidad de ejecución „ Aplicaciones basadas en interfaces de


usuarios
„ Solución de problemas de naturaleza
concurrente „ Simulación

„ Sistemas de control „ SGDB

Diferencias
1. La concurrencia es el acto de ejecutar y administrar múltiples tareas al mismo
tiempo. Por otro lado, el paralelismo es el acto de ejecutar varias tareas
simultáneamente.
2. El paralelismo se obtiene mediante el uso de varias CPU, como un sistema
multiprocesador y la operación de diferentes procesos en estas unidades de
procesamiento o CPU. En contraste, la concurrencia se logra intercalando la
operación de los procesos en la CPU y particularmente el cambio de contexto.
3. Se puede implementar la concurrencia utilizando una sola unidad de
procesamiento, mientras que esto no puede ser posible en caso de paralelismo,
requiere múltiples unidades de procesamiento.
4. La principal diferencia del paralelismo contra la concurrencia es que, en el
paralelismo, todos los procesos concurrentes están íntimamente relacionados a
resolver el mismo problema, de tal forma que el resultado de los demás procesos
afecta al resultado final.

Concurrencia y arquitecturas hardware

Arquitecturas que soportan la programación concurrente:

Sistemas con un solo procesador (sistemas monoprocesador)

No hay paralelismo. Los procesos se reparten el procesador: entrelazado (interleaving)

Sistemas con más de un procesador (sistemas multiprocesador)

Más de un procesador => permite que exista un paralelismo real entre los procesos

Clasificación sistemas multiprocesador

estrechamente acoplados (multiprocesadores)

débilmente acoplados (sistemas distribuidos)


Conclusiones:

Tal como este ensayo lo demuestra el lenguaje de programación es parte fundamental


del porque sin él desarrollarlos sería muy complicado porque facilita la forma en la que
el programador expresa ideas deja ciertos órdenes que el lenguaje puede traducir a un
lenguaje que la computadora pueda entender.

Se han desarrollado lenguajes de alto nivel para que sean más accesibles
y comprensibles para la mayoría de los programadores, de modo que los
programadores puedan centrarse más en resolver la tarea o problemas y en el lenguaje
que la máquina tenía que entender.

Las diferencias entre estos son que generalmente se encuentran


en el archivo que necesitan. Así, podemos observar que la elección de
las herramientas tenderá más hacia el gusto del usuario que la de
la evaluación del desempeño de las herramientas.
La importancia de la programación concurrente es que proporciona un resumen en el que
estudiar el paralelismo sin tener que sumergirse en los detalles de la implementación. La
concurrencia en los lenguajes de programación permite más programas legibles, más
fáciles de mantener, para aumentar la portabilidad y, sin ella, en el caso de sistemas
no podría haber sistema operativo.

Los tres servicios básicos que proporciona la programación


concurrente son: definición de proceso, sincronización de procesos y comunicación entre
procesos. Un ejemplo de este tipo de programación en la vida real es el navegador
web Chrome, cada pestaña abierta respaldada por un proceso independiente.
Bibliografía:

uniwebsidad. (2006). 1.7. Sintaxis (Introducción a JavaScript). Recuperado de:


https://uniwebsidad.com/libros/javascript/capitulo-
1/sintaxis#:%7E:text=La%20sintaxis%20de%20un%20lenguaje,para%20ese%2
0lenguaje%20de%20programaci%C3%B3n.

Aho, A. (2021). Compiladores Principios Tecnicas Y Herramientas (2.a ed.) [Libro


electrónico]. ADDISON WESLEY LONGMAN/PEARSON. Recuperado de:
https://books.google.com.ec/books?id=i9UfQwAACAAJ&dq=libro+compilador
es+principios+t%C3%A9cnicas+y+herramientas+pdf&hl=es-
419&sa=X&redir_esc=y

Alfonseca, M., Cruz, M., Ortega, A., & Pulido, E. (2006). Compiladores e interpretes:
teoría y práctica (Vol. 1) [Libro electrónico]. PEARSON EDUCACIÓN, S.A.
Recuperado de:
https://books.google.com.ec/books?id=yJKOGAAACAAJ&dq=Compiladores+e
+interpretes:+teor%C3%ADa+y+pr%C3%A1ctica&hl=es-
419&sa=X&redir_esc=y

Nielson, H., & Nielson, F. (1992). Semantics with Applications. Wiley.

Watt, D., & Muffy, T. (1996). Sintaxis y semántica del lenguaje de programación.
Prentice Hall.

Mosses, P. (1991). Action Semantics. Cambridge University Press.


CUADROS SINÓPTICOS
REACTIVOS

1. ¿Cómo también es conocido el análisis ascendente?

También es conocido como análisis sintáctico por desplazamiento y reducción.

2. ¿Cuál es la diferencia principal del paralelismo contra la recurrencia?

La diferencia es que, en el paralelismo, todos los procesos concurrentes están íntimamente


relacionados a resolver el mismo problema, de tal forma que el resultado de los demás
procesos afecta al resultado final.

También podría gustarte