Lexico, Sintaxis, BNF y Semantica Del Lenguaje C++

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

Universidad de Guadalajara

Centro Universitario de la Costa

Unidad de Aprendizaje: Traductores de lenguajes

Tema: Léxico, sintaxis y semántica del lenguaje C++

Maestro: Eduardo Rubén Hernández González

Alumno: David Lara Benitez

Código: 217691619

Semestre: 5°

Grupo: “A”

Turno: Vespertino
Contenido
Introducción ...................................................................................... 3
Lenguaje de programación C++ ......................................................................................... 3

Léxico en C++ .......................................................................................................................... 3

Semántica en C++ .................................................................................................................. 4

Desarrollo ......................................................................................... 6
Léxico ........................................................................................................................................ 6

Sintaxis y BNF ......................................................................................................................... 9

Conclusión .......................................................................................16

Bibliografías .....................................................................................16
Introducción

Lenguaje de programación C++


C++ es un poderoso lenguaje de programación de propósito general y alto
rendimiento. Fue desarrollado como una extensión del lenguaje C e incorpora
características adicionales como la programación orientada a objetos, plantillas y
manipulación de memoria. C++ se utiliza ampliamente en el desarrollo de software,
desde aplicaciones de escritorio hasta sistemas embebidos y juegos. Su sintaxis es
similar a la de C, lo que facilita la transición para aquellos familiarizados con ese
lenguaje. Con su combinación de eficiencia y flexibilidad, C++ sigue siendo una
opción popular entre los programadores para una amplia gama de aplicaciones.

Léxico en C++
El léxico de un lenguaje de programación se refiere al conjunto de reglas y
símbolos que definen la estructura y el significado de las palabras o elementos
individuales en el código fuente. Comprende la gramática básica del lenguaje y
define cómo se deben formar y combinar los diferentes tokens o unidades léxicas.

En C++, el léxico es similar al de otros lenguajes de programación, pero con


algunas características específicas del lenguaje. Algunos aspectos del léxico en
C++ incluyen:

- Palabras clave: C++ tiene un conjunto de palabras clave reservadas que


tienen un significado especial en el lenguaje, como "if", "for", "while", "class",
"int", entre otros. Estas palabras clave no pueden ser utilizadas como
nombres de variables u otros identificadores.
- Identificadores: Los identificadores son nombres utilizados para representar
variables, funciones, clases u otros elementos del programa. En C++, los
identificadores pueden consistir en letras, dígitos y guiones bajos,
comenzando con una letra o guión bajo. Sin embargo, no pueden ser
palabras clave y deben seguir ciertas convenciones de estilo.
- Literales: Los literales son valores constantes que aparecen directamente en
el código fuente, como números enteros, números de punto flotante,
caracteres y cadenas de texto.
- Operadores: C++ tiene una variedad de operadores aritméticos, lógicos, de
asignación y de comparación, entre otros. Estos operadores se utilizan para
realizar operaciones y manipulaciones en el código, como sumas, restas,
comparaciones booleanas, asignaciones de valores, etc.
- Delimitadores: Los delimitadores en C++ incluyen paréntesis, corchetes,
llaves, comas, puntos y punto y coma. Estos símbolos se utilizan para
agrupar, separar o indicar el final de ciertas construcciones del lenguaje,
como la definición de funciones, llamadas a funciones, declaraciones de
bloques, entre otros.
- Comentarios: Los comentarios son fragmentos de texto que se utilizan para
agregar notas explicativas en el código fuente. En C++, los comentarios de
una sola línea comienzan con "//", mientras que los comentarios de múltiples
líneas se delimitan entre "/" y "/".

El conocimiento y cumplimiento de las reglas léxicas en C++ es esencial para


escribir código válido y comprensible. El compilador de C++ realiza el análisis léxico
como una de las primeras etapas de la compilación, transformando el código fuente
en una secuencia de tokens que se utilizan para construir la representación
intermedia del programa.

Semántica en C++
La semántica en un lenguaje de programación se refiere al significado o
interpretación de las construcciones y expresiones del código fuente. Describe
cómo se ejecutan las instrucciones y cómo se manipulan los datos en un programa.
Algunos aspectos relevantes de la semántica en C++ son los siguientes:

- Semántica de tipos: C++ es un lenguaje de programación fuertemente tipado,


lo que significa que los tipos de datos son importantes y deben ser
coherentes en las operaciones que se realizan. La semántica de tipos en C++
incluye la verificación de tipos en tiempo de compilación y en tiempo de
ejecución, la conversión de tipos y las reglas de promoción y decaimiento de
tipos.
- Semántica de variables y objetos: C++ utiliza un modelo de variables y
objetos que define cómo se crean, se almacenan y se manipulan en tiempo
de ejecución. Esto incluye la inicialización de variables, el ciclo de vida de los
objetos, la gestión de memoria (como la asignación y liberación de memoria
dinámica) y la invocación de constructores y destructores.
- Semántica de punteros y referencias: C++ permite el uso de punteros y
referencias, que son elementos fundamentales para trabajar con la gestión
de memoria y la manipulación de datos. La semántica de punteros y
referencias abarca aspectos como la asignación de punteros, la de
referenciación, la aritmética de punteros y el paso de argumentos por
referencia.
- Semántica de operadores: C++ proporciona una amplia gama de operadores
para realizar diversas operaciones en los datos, como aritmética, lógica,
asignación, comparación y manipulación de bits. La semántica de los
operadores determina cómo se realizan estas operaciones y cómo se
interpretan los resultados.
- Semántica de control de flujo: C++ ofrece estructuras de control de flujo,
como bucles y estructuras condicionales, que determinan el orden de
ejecución de las instrucciones. La semántica de control de flujo define cómo
se evalúan las condiciones, cómo se ejecutan los bloques de código
asociados y cómo se realiza la transferencia del control entre diferentes
partes del programa.
- Semántica de excepciones: C++ admite el manejo de excepciones, que son
eventos inesperados o errores que pueden ocurrir durante la ejecución del
programa. La semántica de excepciones establece cómo se lanzan,
propagan y capturan las excepciones, y cómo se manejan y se realizan
acciones específicas cuando se producen.

Entender la semántica en C++ es fundamental para escribir código correcto y


predecible.
Desarrollo

Léxico
En C++ el léxico está compuesto por los siguientes elementos:

• Palabras clave:

alignas, alignof, and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch, char,
char8_t, char16_t, char32_t, class, compl, concept, const, consteval, constexpr,
const_cast, continue, co_await, co_return, co_yield, decltype, default, delete, do,
double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend,
goto, if, inline, int, long, mutable, namespace, new, noexcept, not, not_eq, nullptr,
operator, or, or_eq, private, protected, public, register, reinterpret_cast, requires,
return, short signed, sizeof, static, static_assert, static_cast, struct, switch,
synchronized, template, this, thread_local, throw true, try typedef, typeid, typename,
union, unsigned, using, virtual, void, volatile, wchar_t, while, xor, xor_eq.

• Identificadores:

Los identificadores deben comenzar con una letra o un guion bajo (_). No pueden
comenzar con un número u otro carácter especial.

Después del primer carácter, los identificadores pueden contener letras, dígitos y
guiones bajos.

Los identificadores distinguen entre mayúsculas y minúsculas, lo que significa


que "miVariable" y "mivariable" se considerarían identificadores diferentes.

No se pueden utilizar palabras clave reservadas del lenguaje como identificadores.

Los identificadores no deben tener una longitud excesiva, ya que pueden estar
sujetos a limitaciones impuestas por el compilador.

• Operadores:

En C++, los operadores son símbolos o palabras reservadas que se utilizan para
realizar operaciones en los datos. Los operadores en C++ se clasifican en diferentes
categorías según el tipo de operación que realizan.
Operadores aritméticos:

- Suma (+).
- Resta (-).
- Multiplicación (*).
- División (/).
- Módulo (%).
- Incremento (++).
- Decremento (--).

Operadores de asignación:

- Asignación simple (=).


- Asignación compuesta (+=, -=, *=, /=, %=).

Operadores de comparación:

- Igualdad (==).
- Desigualdad (!=).
- Mayor que (>).
- Menor que (<).
- Mayor o igual que (>=).
- Menor o igual que (<=).

Operadores lógicos:

- AND lógico (&&).


- OR lógico (||).
- NOT lógico (!).

• Delimitadores

En C++, los delimitadores son caracteres especiales utilizados para indicar


límites y estructuras en el código fuente. Estos delimitadores se utilizan para
agrupar, separar y definir diferentes elementos en el programa.

- Paréntesis: "(" y ")" se utilizan para agrupar expresiones y llamar funciones.


- Llaves: "{" y "}" se utilizan para definir bloques de código y delimitar el alcance
de las variables locales.
- Corchetes: "[" y "]" se utilizan para definir arreglos y acceder a elementos
específicos dentro de ellos.
- Coma: "," se utiliza para separar elementos en una lista, como argumentos
de función o elementos de un arreglo.
- Punto y coma: ";" se utiliza para finalizar una instrucción o declaración.
- Dos puntos: ":" se utiliza en varias situaciones, como en la declaración de
casos en una instrucción switch, en la definición de un rango en un bucle for,
o en la definición de un miembro de una clase.
- Comillas: '"' se utilizan para delimitar cadenas de caracteres.
- Comillas simples: "'" se utilizan para delimitar caracteres individuales.
- Barra vertical: "|" se utiliza en operaciones de bits y en expresiones lógicas
para representar la operación OR.
- Operadores de ámbito: "::" se utilizan para acceder a miembros de clases y
espacios de nombres.

• Comentarios

En C++, los comentarios se utilizan para agregar notas explicativas o


aclaraciones dentro del código fuente. Los comentarios no tienen ningún efecto en
la ejecución del programa y se ignoran por completo durante la compilación. Sirven
para mejorar la comprensión del código tanto para el programador como para otros
lectores del mismo.

Existen dos tipos de comentarios en C++:

- Comentarios de una línea: Se inician con dos diagonales "//" y abarcan todo
el texto que les sigue en la misma línea.
- Comentarios de múltiples líneas: Se inician con "/" y se cierran con "/".
Pueden abarcar varias líneas de texto.
Sintaxis y BNF

Símbolos especiales:

- ::= (Double Colon): Indica que la parte izquierda de la producción se define


como la expresión de la parte derecha. Por ejemplo, A ::= B significa que A
se define como B.
- | (Vertical Bar): Se utiliza para separar múltiples opciones en una producción.
Por ejemplo, A ::= B | C significa que A puede ser B o C.
- <> (Angle Brackets): Se utilizan para encerrar símbolos no terminales. Por
ejemplo, <Expression> representa un símbolo no terminal llamado
"Expression".
- "" (Quotation Marks): Se utilizan para encerrar literales o símbolos terminales.
Por ejemplo, "int" representa el literal "int".
- [] (Square Brackets): Indican que lo que está adentro es opcional. Por
ejemplo, [Expression] significa que Expression es opcional.
- {} (Curly Braces): Indican repetición cero o más veces de lo que está adentro.
Por ejemplo, {Statement} significa que puede haber cero o más repeticiones
de Statement.
- () (Parentheses): Se utilizan para agrupar elementos en una producción. Por
ejemplo, (A | B) significa que A o B se pueden agrupar juntos.
- ; (Semicolon): Se utiliza para indicar el final de una producción o regla.
Así se inicializa un programa en C++ con notación BNF:

Los símbolos <Includes>, <Header>, <Library>, <Path>, <GlobalDeclarations>,


<GlobalDeclaration>, <MainFunction>, <CodeBlock>, <Statements>, <Statement>,
<VariableDeclaration>, <ControlStatement>, <IfStatement>, <ForStatement>,
<WhileStatement>, y <SwitchStatement> son símbolos no terminales que se
definen en las producciones correspondientes. Representan diferentes partes y
constructos del programa en C++.

Así se declara una variable en C++ con notación BNF:

Aquí vemos como para declarar la variable tenemos que si o si iniciar con una
letra o barra baja ya que no se puede inicializar una variable con un número.
Así se realiza un if, else en C++ con notación BNF:

Como podemos observar requerimos la palabra clave “if”, una expresión entre
paréntesis junto a la palabra reservada, después una línea de código, así como
también opcional como lo marcan los corchetes la palabra “else” junto a otra línea
de código.

Así se realiza un bucle while en C++ con notación BNF:

Iniciamos utilizando la palabra clave while, seguido de su expresión entre


paréntesis, terminando con su bloque de código, en el cual dependiendo de su
expresión podremos describirle cualquier tipo de las que se muestra en la
representación BNF.
Así se realiza un bucle do-while en C++ con notación BNF:

Como podemos observar en la realización de esta notación BNF es muy similar al


ciclo while, teniendo como únicas dos diferencias la palabra clave “do”, al igual que
el orden en el cual se realiza la estructura, siendo primero la palabra clave “do”,
después realizando el bloque de código a continuación, agregando la palabra clave
while y después entre paréntesis agregando la expresión finalizando con un punto
y coma.

Así se realiza un bucle for en C++ con notación BNF:

Para el bucle for en esta representación, <ForStatement> representa un bucle "for"


en C++. Comienza con la palabra clave "for", seguida de paréntesis "(" y tres partes
separadas por punto y coma ";". La primera parte es <ForInitializer>, que puede ser
una declaración de variable o una expresión. La segunda parte es <ForCondition>,
que representa la condición que se evalúa antes de cada iteración del bucle. La
tercera parte es <ForIncrement>, que representa la expresión que se ejecuta
después de cada iteración del bucle. Luego sigue un <CodeBlock>, que representa
el bloque de código que se ejecuta en cada iteración del bucle.

Así se realiza una función en C++ con notación BNF:

En esta representación, <FunctionDeclaration> representa la declaración de una


función en C++. Comienza con <ReturnType>, que representa el tipo de valor de
retorno de la función, seguido de <Identifier>, que es el nombre de la función.
Después de eso, viene paréntesis "(" y <ParameterList>, que representa la lista de
parámetros de la función separados por comas. La declaración de la función se
completa con <CodeBlock>, que representa el bloque de código que forma el cuerpo
de la función.
Así se define una constante en C++ con notación BNF:

Como podemos analizar para definir una constante en C++ iniciamos con la palabra
clave “const” seguido del tipo de dato del cual estemos hablando, su identificador,
un símbolo de igualdad acompañado de una expresión y terminando con un punto
y coma.

Así se declara un array en C++ con notación BNF:

En esta representación, <ArrayDeclaration> representa la declaración de un arreglo


en C++. Comienza con <Type>, que representa el tipo de elementos que contendrá
el arreglo, seguido de <Identifier>, que es el nombre del arreglo. Después de eso,
viene un corchete "[" seguido de <Size>, que representa el tamaño del arreglo,
especificado como un número entero positivo. Opcionalmente, se puede incluir un
operador de asignación "=" seguido de <InitializerList>, que representa una lista de
expresiones separadas por comas que se utilizará para inicializar los elementos del
arreglo. La declaración del arreglo se cierra con un punto y coma ";".
Así se realiza un swich en C++ con notación BNF:

En esta representación, <SwitchStatement> representa una estructura de control


"switch" en C++. Comienza con la palabra clave "switch", seguida de paréntesis "("
y <Expression>, que representa la expresión cuyo valor se evaluará en cada caso
del "switch". Luego sigue un bloque de código entre llaves "{ }", que contiene uno o
más <CaseStatement> seguidos opcionalmente de un <DefaultStatement>. El
<CaseStatement> comienza con la palabra clave "case", seguida de <Constant>,
que representa un valor constante (un identificador o un literal) que se comparará
con la expresión en el "switch". El <CaseStatement> está seguido por dos puntos
":" y <Statements>, que representan las instrucciones que se ejecutarán si la
expresión del "switch" coincide con el valor constante especificado. El
<DefaultStatement> es opcional y se utiliza para especificar un bloque de código
que se ejecutará si ninguno de los casos coincide con la expresión del "switch".
Conclusión

La notación BNF ofrece una sintaxis simple y clara para describir las reglas
gramaticales de un lenguaje de programación o cualquier otro lenguaje formal.
Permite definir de manera precisa cómo se pueden combinar los símbolos para
formar construcciones válidas en el lenguaje, lo que facilita el análisis y la
comprensión del lenguaje.

También practicando la notación BNF podemos darnos una idea mas clara
de como interpreta las cosas nuestro lenguaje de programación, así como también
la semántica le ayuda a darle sentido a todo.

Bibliografías

❖ Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Compiladores: Principios, Técnicas y


Herramientas. Addison-Wesley Iberoamericana. 1990.

❖ Procesadores de lenguaje. (2020). Departamento De Ciencias De La Computación

Universidad De Alcalá. Retrieved May 8, 2023, from

http://www.cc.uah.es/ie/docencia/ProcesadoresDeLenguaje/ProcesadoresDeLenguaj

eTema4_1xpagina.pdf

❖ INFORMATICA.UV. (s.f.). Obtenido de


http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2008/tema2.pdf
❖ Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas,
Tema 3, páginas: 85-158.

❖ Notación BNF (Backus Naur-Form). (2020). Prezi. Retrieved May 11, 2023, from

https://prezi.com/bnl8shr-fjni/notacion-bnf-backus-naur-form/

También podría gustarte