Lexemas. Puntuación, caracteres especiales y operaciones en C

El alfabeto del lenguaje de programación C se basa en un conjunto de caracteres de la tabla de códigos ASCII. Incluye:

Letras minúsculas y mayúsculas del alfabeto latino;

Números del 0 al 9;

El carácter "_" (guión bajo);

Conjunto de caracteres especiales: " ( ) , | + - % / \ ; " : ?< > = ! & # ~ ^ . *

Otros símbolos.

El alfabeto C se utiliza para construir palabras, que en C se denominan lexemas. Hay cinco tipos de lexemas:

Identificadores;

Palabras clave;

Signos (símbolos) de operaciones;

Los literales (del inglés constante) son una entrada en el código fuente de un programa de computadora que representa un valor fijo. 4 tipos de literales: entero, real, carácter, cadena. Los literales numéricos se escriben directamente como un número. Los literales de cadena son una cadena de caracteres entre comillas. Los literales de caracteres incluyen un solo carácter. ;

Separadores (espacio, pestañas horizontales y verticales, nueva línea, comentarios).

6. Palabras clave del lenguaje C.

Las palabras clave son identificadores reservados que tienen un significado específico. Las palabras clave del lenguaje C están reservadas, es decir. no puede utilizarlos para otros fines, como especificar un nombre de variable. 32 palabras clave.

Bucles: for, while, do;

Toma de decisiones y elección: si, si no, cambio, caso, incumplimiento.

Transiciones: romper, continuar, ir a;

Tipo de datos: char, int, short, long, unsigned, firmado, float, double, struct, union, typedef, void.

Clases de memoria: automática, externa, de registro, estática.

Misc: tamaño de, retorno

Aplicable sólo en algunos sistemas: enumeración

Calificador de tipo: constante, volátil.

7. Signos de puntuación, caracteres especiales y signos de operación en lenguaje C.

signos de puntuación y personajes especiales:

Coma

; punto y coma

: dos puntos

Signo de interrogación

" paréntesis de comillas simples

"" corchete de comillas dobles

(paréntesis izquierdo

) paréntesis derecho

[ corchete izquierdo

] soporte rectangular derecho

(llave izquierda

) llave derecha

< левая угловая скобка

> soporte en ángulo recto

Signo de admiración

| barra vertical

/ signo de división

\ signo de división inversa

% por ciento

& signo

^ tapa, casa

* asterisco

El lenguaje C contiene una gran cantidad de operaciones integradas. Hay cuatro clases de operaciones: operaciones aritméticas, lógicas, bit a bit y de comparación. Además de estos, también existen algunos operadores especiales, como el operador de asignación.

La forma general del operador de asignación es: nombre de variable=expresión;

Una sola declaración de asignación puede asignar el mismo valor a muchas variables. Para hacer esto, use el operador de asignación múltiple: x=y=z=0;

Una asignación compuesta es una variación del operador de asignación en la que la notación se acorta y se hace más cómoda de escribir. Por ejemplo, el operador x=x+10; se puede escribir como x+=10;

Operaciones aritméticas.

Resta, también menos unario

Suma

* multiplicación

/ división

% restante de la división

Un incremento, o aumento, suma 1 al valor de una variable.

Decremento o reducción

Prioridad de ejecución de operadores aritméticos:

Máximo: ++, --, - (menos unario), *, /, %

Mínimo: +, - .

Las operaciones con la misma prioridad se ejecutan de izquierda a derecha. Usando paréntesis, puede cambiar el orden de los cálculos.

Operaciones de comparación:

> más

>= mayor o igual a

< меньше

<= меньше или равно

No igual

Operaciones lógicas

NO, negación

Operaciones sobre punteros:

& - operación de recepción de dirección: devuelve la dirección de la variable cuyo nombre sigue a la designación de la operación.

* - direccionamiento indirecto: devuelve el valor escrito en la dirección a la que hace referencia el puntero.

Operaciones adicionales:

¿Condiciones de operación?

¿Operador? a menudo se puede utilizar en lugar de una declaración if-then-else.

¿Expresión1? Expresión2: Expresión3;

Primero se evalúa la Expresión1, si es verdadera, luego se evalúa la Expresión2 y se asigna su valor a la expresión completa; si la Expresión1 es falsa, entonces se evalúa la Expresión3 y se asigna su valor a toda la expresión.

y=x>9 ? 100:200; a la variable y se le asignará el valor 100.

sizeof proporciona el tamaño (en bytes) del operando de la derecha.

(tipo) operación de conversión de tipo: convierte el valor que le sigue en el tipo definido por la palabra clave entre paréntesis.

El operador de coma vincula dos expresiones en una y garantiza que la expresión de la izquierda se evalúe primero. Un caso de uso típico es incluir información adicional en expresión de control para bucle.

Operaciones sobre estructuras y uniones.

El operador de membresía se utiliza junto con el nombre de una estructura (o unión) para especificar un elemento de esa estructura (o unión). Si nombre es el nombre de una estructura y miembro es el nombre de los elementos especificados en la plantilla de estructura, entonces nombre.miembro define ese elemento de la estructura.

-> direccionamiento indirecto. Se utiliza junto con un puntero a una estructura (o unión) para identificar uno u otro elemento de estas estructuras (o uniones). Supongamos que ptrstr es un puntero a una estructura y miembro es un elemento especificado en la plantilla de estructura. Luego ptrstr->member determina que es un miembro de la estructura a la que hace referencia el puntero.

Alfabeto de idioma

Conferencia 1 Composición del lenguaje.

Se introducen los conceptos básicos para toda la presentación posterior: cuáles son los "bloques de construcción" más simples de todos los textos en un lenguaje de programación, qué se entiende por tipo de datos, qué tipos de datos integrados hay en el lenguaje C++.

En un texto en cualquier lenguaje natural existen cuatro elementos principales: símbolos, palabras, frases y oraciones. Un lenguaje de programación también contiene elementos similares, solo que las palabras se llaman lexemas (estructuras elementales), las frases se llaman expresiones y las oraciones se llaman operadores.

Todos los textos de un idioma se escriben utilizando su alfabeto. El alfabeto C++ incluye:

  • mayúsculas y minúsculas letras latinas y el guión bajo (_), que se utiliza junto con las letras;
  • Números arábigos del 0 al 9;
  • caracteres especiales como +, *, ( y &;
  • caracteres de espacio en blanco: caracteres de espacio, tabulación, nueva línea y formato.

El alfabeto del idioma en el estándar se denomina juego de caracteres básico. Además, existe el concepto de "conjunto de caracteres de implementación": el conjunto completo de caracteres disponibles en esta computadora. Este conjunto contiene el conjunto base como un subconjunto.

A partir del conjunto básico de caracteres, se componen tokens de idioma y directivas de preprocesador. Los caracteres del conjunto de implementación se utilizan para escribir comentarios. El compilador ignora los comentarios.

Hay los siguientes tipos simbólico:

  • nombres (identificadores);
  • palabras clave;
  • señales de operación;
  • separadores;
  • literales (constantes).

Los límites de los tokens están determinados por otros tokens, como delimitadores o marcas de operación.

Los tokens del lenguaje de programación son similares a las palabras del lenguaje natural. Por ejemplo, los tokens son la constante 128 (pero no su parte 12), el nombre Vasia, la palabra clave goto y el operador de suma signo +. Las expresiones y operadores se forman a partir de lexemas.

  • Una expresión especifica una regla para calcular un valor determinado. Por ejemplo, la expresión a + b especifica la regla para calcular la suma de las cantidades a y b.
  • El operador especifica una descripción completa de alguna acción.

Los operadores se dividen en ejecutables y no ejecutables, simples y compuestos. Los operadores ejecutables especifican acciones sobre los datos. Los operadores no ejecutables sirven para describir datos, por lo que a menudo se les llama operadores de descripción o simplemente descripciones. Por ejemplo, int a ; es un operador para describir una variable entera a.

Una declaración o bloque compuesto es un grupo de declaraciones encerradas entre llaves. Los bloques se pueden anidar.

Cada elemento de un lenguaje está definido por la sintaxis y la semántica. Definiciones sintácticas establece reglas para la construcción de elementos del lenguaje, y la semántica determina su significado y reglas de uso.

Un conjunto de descripciones y operadores combinados por un único algoritmo forma un programa.

hasta la actualidad. El libro de texto fue certificado por el Ministerio de Educación. Federación Rusa, está incluido en las listas de literatura recomendada en muchas universidades de Rusia y países vecinos. Los materiales de los libros de texto incluidos en este curso han sido parcialmente actualizados y revisados. En 2010, el libro de texto recibió el Premio del Gobierno de San Petersburgo "Por logros destacados en el campo de la educación superior y educación vocacional"como parte de un complejo educativo y metodológico sobre lenguajes de programación.

Este complejo también incluye un taller sobre C/C++ y libros de texto sobre los lenguajes C# y Pascal [, construidos según el mismo principio. Importante cursos de formación se puede encontrar en este sitio. El complejo incluye más de 250 versiones individuales de trabajos de laboratorio para un grupo de estudio de 20 personas (todas las opciones se pueden encontrar en el libro de texto) y más de 1000 preguntas de examen. Los profesores se beneficiarán de las presentaciones de conferencias. En el sitio web de la escuela de programación de Internet http://ips.ifmo.ru puede comprobar la exactitud de algunos trabajo de laboratorio usando el sistema pruebas automáticas programas.

El propósito de este curso es proporcionar una presentación concisa y clara de las principales características del lenguaje C++ de acuerdo con el estándar ISO/IEC 14882 (2003). Para escribir programas durante el entrenamiento, puede utilizar, por ejemplo, el compilador gcc o entorno microsoft Visual C++ 2005 Edición Express. Estos productos de software se distribuyen de forma gratuita y soportan bastante bien el estándar.

Envíe críticas amables y constructivas, así como sugerencias para mejorar el curso, al autor en [email protected].

Composición del idioma

Puedes descargar la presentación de la conferencia.

En un texto en cualquier lenguaje natural existen cuatro elementos principales: símbolos, palabras, frases y oraciones. Contiene elementos similares lenguaje de programación, solo las palabras se denominan lexemas (construcciones elementales), frases - expresiones y oraciones - operadores.

Alfabeto de idioma

Todos los textos en el idioma están escritos usándolo. alfabeto. El alfabeto C++ incluye:

  • letras latinas mayúsculas y minúsculas Y subrayar(_), que se utiliza junto con letras;
  • números arábigos de 0 a 9;
  • personajes especiales, como +, *, ( y &;
  • caracteres de espacio en blanco- espacios, caracteres de tabulación, caracteres de nueva línea y formato.

El alfabeto del idioma en el estándar se llama conjunto básico personajes. Además, existe el concepto " conjunto de caracteres de implementación" es el conjunto completo de caracteres disponibles en una computadora determinada. Este conjunto contiene el conjunto base como un subconjunto de .

Los personajes del set básico se componen de lexemas de la lengua Y directivas del preprocesador. Los caracteres del conjunto de implementación se utilizan para escribir comentarios. El compilador ignora los comentarios.

Lexemas

Existen los siguientes tipos lexema:

  • nombres (identificadores);
  • palabras clave;
  • señales de operación;
  • separadores;
  • literales (constantes).

Los límites de los tokens están determinados por otros tokens, como delimitadores o marcas de operación.

Los tokens del lenguaje de programación son similares a las palabras del lenguaje natural. Por ejemplo, los tokens son la constante 128 (pero no su parte 12), el nombre Vasia, la palabra clave ir a y el signo de operación de suma +. Las expresiones y operadores se forman a partir de lexemas.

  • Expresión especifica una regla para calcular un determinado valor. Por ejemplo, la expresión a + b especifica la regla para calcular la suma de las cantidades a y b.
  • Operador especifica una descripción completa de alguna acción.

Los operadores se dividen en ejecutables y no ejecutables, simples y compuestos. Ejecutable Los operadores especifican acciones sobre los datos. Las declaraciones no ejecutables sirven para describir datos, por lo que a menudo se les llama operadores de descripción o simplemente descripciones. Por ejemplo, en un; - Este operador de descripción variable entera a.

operador compuesto o bloquear es un grupo de declaraciones encerradas entre llaves. Los bloques se pueden anidar.

Cada elemento del lenguaje está definido. sintaxis Y semántica. Las definiciones sintácticas establecen reglas para construir elementos del lenguaje y la semántica determina su significado y reglas de uso.

Se forma un conjunto de descripciones y operadores combinados por un único algoritmo. programa.

Ruta desde el texto del programa hasta el código ejecutable

Para ejecutar un programa, es necesario traducirlo a un lenguaje que comprenda el procesador: a códigos de máquina. Este proceso consta de varias etapas.

Primero, el código fuente del programa es procesado por un preprocesador. Busca en el texto del programa "sus" directivas (instrucciones, comandos), que comienzan con el símbolo # ("hash"), y las ejecuta. Las directivas del preprocesador le permiten insertar texto de otros archivos en el programa, excluir fragmentos de código del proceso de compilación o reemplazar algunos fragmentos por otros.

El texto del programa procesado por el preprocesador (en el estándar C++ se denomina "unidad de compilación") se transfiere al compilador, que realiza funciones léxicas y analizando. En fase análisis léxico analizador léxico ( escáner) escanea secuencialmente el flujo de símbolos que llegan a su entrada y que componen el texto fuente del programa y selecciona tokens válidos. Sus límites están determinados por delimitadores, caracteres de espacio en blanco y otros lexemas.

En fase analizando analizador (analizador) Basándose en la gramática del lenguaje, reconoce expresiones y operadores construidos a partir de lexemas. Esto revela errores de sintaxis . También hecho análisis semántico, cuyo propósito es también detectar diversos tipos de errores semánticos (por ejemplo, como errores repetidos descripción de la variable) .

Si no se encuentran errores en el programa, se ejecuta la fase. generación de código.El tipo específico de código depende de qué tipo de aplicación estemos creando: Windows o. NETO. Si se trata de una aplicación normal de Windows, entonces está construida módulo de objeto- pieza de trabajo programa ejecutable V códigos de máquina. Para la aplicación. NET se genera en el lenguaje CIL independiente del sistema.

El destino futuro de este código también depende del tipo. la aplicación que se está creando. Para ordinario aplicaciones de windows enlazador(sinónimos: enlazador, editor de enlaces) formularios módulo ejecutable programas, conectando otros módulos de objetos al módulo de objetos, incluidos los que contienen elementos bibliotecas estándar, que se utilizan en cualquier programa (por ejemplo, para realizar salida a la pantalla). Si un programa consta de varios archivos fuente, se compilan por separado y se combinan en la etapa

Nombre del parámetro Significado
Tema del artículo: Lexemas
Rúbrica (categoría temática) Programación

Alfabeto

El estándar C99 distingue dos conjuntos de caracteres incluidos en el alfabeto: básico y extendido. conjunto básico incluye los siguientes personajes:

Mayúsculas y letras minúsculas alfabeto latino;

números arábigos;

Caracteres especiales: “ { } , | () + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ . *

El juego de caracteres ampliado debe estar vacío o contener, por ejemplo, los caracteres alfabetos nacionales. Por ejemplo, la señora estudio visual 2008 permite el uso de algunos subconjuntos del espacio Unicode, incluido el alfabeto cirílico.

Comer grupos especiales de tres caracteres (secuencias de tres caracteres/secuencias de trígrafo), que se convierten en otros caracteres en la etapa de preprocesamiento, por ejemplo, ??= partidos #, ??( partidos [, ??/ coincidencias \ y otros.

Los siguientes lexemas de la lengua se forman a partir de los caracteres del alfabeto.

1. Identificadores: un conjunto de caracteres que se utilizan para identificar objetos (variables, funciones, clases, tipos de datos, etc.). Los identificadores se escriben de acuerdo con las reglas: es una secuencia de letras, números y guiones bajos, que no comienza con un número. . Los identificadores en los lenguajes C y C++ distinguen entre mayúsculas y minúsculas, a diferencia de, por ejemplo, Pascal.

un tipo especial Los identificadores son palabras clave (de servicio): están reservadas para uso especial y no se puede anular.

El estándar C99 establece las siguientes palabras clave: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, Register, restrict, return, short, firmado, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while, _Bool, _Complex, _Imaginary

2. Las constantes son objetos a los que se accede "por valor" (la terminología de E. Dijkstra, quien definió la diferencia entre constantes y variables según la forma en que se usan en los programas; usando el nombre de la variable, indicamos DIRECCIÓN dado y usando constante, lo anotamos, es decir, su significado). C soporta cuatro tipo simple constantes: carácter, número entero, punto flotante y cadena. El tipo de constante determina cómo se almacena en la memoria y las operaciones que se permiten en ella. El valor de tipo se especifica mediante la forma de notación de la constante (su apariencia).

3. Señales de operaciones.

4. Separadores. Los delimitadores son espacio, tabulación y nueva línea.

5. Los comentarios son el elemento más sencillo. Su propósito es mejorar la legibilidad humana del texto; son necesarios para mantener los programas y son un elemento de la tecnología de desarrollo. software. El lenguaje admite dos tipos de comentarios: en bloque y en línea.

Los comentarios de bloque incluyen cualquier secuencia de caracteres en una o más líneas, comienzan y terminan. combinación especial caracteres /* y */ que no se pueden utilizar en ningún otro contexto.

Los comentarios de línea se encuentran en una línea y comienzan con una doble barra.

// El comentario debe caber hasta el final de la línea.

y entre estos caracteres puedes escribir comentarios multilínea

Si algún texto de programa ocupa varias líneas, pero el compilador debe procesarlo como una sola línea, utilice el símbolo ʼʼ\ʼʼ.

printf(“Esto es \

Lexemas: concepto y tipos. Clasificación y características de la categoría "Lexemas" 2017, 2018.

Leer también

  • - Lexemas

    Alfabeto del idioma Clase 1 Composición del lenguaje Se introducen los conceptos básicos para todas las presentaciones posteriores: cuáles son los "bloques de construcción" más simples de todos los textos en un lenguaje de programación, qué se entiende por tipo de datos, qué tipos de datos integrados son en el lenguaje C++.

  • EN... El tema de escribir en mi propio idioma me persigue desde hace unos seis meses. No me propuse el objetivo de "matar", CaféScript, Mecanografiado OLMO


    , miles de ellos, solo quería entender la cocina y cómo se escriben en general. Para mi desagradable sorpresa, la mayoría de estos lenguajes usan Jison (Bison para javascript ), y esto no entraba del todo dentro de mi tarea: "comprender", ya que de hecho Jison hace todo por ti, cobra AST de acuerdo con las reglas que establezcas (Jison como tal gran herramienta


    , que hace la mayor parte del trabajo por usted, pero ahora no se trata de él).


    Al final, mediante prueba y error (o, más precisamente, leyendo artículos e ingeniería inversa), aprendí a escribir mis propios lenguajes de programación completos, desde dividir el texto fuente en lexemas hasta traducirlo a código JS. Vale la pena señalar que este manual Para mi desagradable sorpresa, la mayoría de estos lenguajes usan Jison (Bison para no atado a


    , fue elegido únicamente por su velocidad de desarrollo y legibilidad, por lo que puede escribir su "Lisp"/"Python"/"su nueva sintaxis" en cualquier idioma que conozca. Además, hasta el momento de escribir un compilador (en nuestro caso, un traductor), el proceso de escribir un idioma no difiere de los procesos de creación de idiomas compilados en/A.S.M./código de bits JVM/código de bits LLVM etc. Para mi desagradable sorpresa, la mayoría de estos lenguajes usan Jison (Bison para.


    , lo que significa que esta guía no se limita a crear un idioma que pueda traducirse al

    Todo el código que se escribirá en este (y en los artículos posteriores) está en Github. Las etiquetas indican el principio y el final de los artículos para mayor comodidad.

    una pequeña teoría código fuente en el código JS final se procede de la siguiente manera:


    código fuente -(Lexer)-> tokens -(Parser)-> AST -(Compilador)-> código js

    ¿Qué está pasando aquí?

    1) Lexer

    El código fuente de nuestro programa está dividido en tokens. En pocas palabras, es estar en texto fuente palabras clave, literales, símbolos, identificadores, etc.


    Aquellos. a la salida de este ( El tema de escribir en mi propio idioma me persigue desde hace unos seis meses. No me propuse el objetivo de "matar"):


    a = verdadero si es console.log("Hola, lexer")

    Obtenemos esto (versión corta):


    Porque El tema de escribir en mi propio idioma me persigue desde hace unos seis meses. No me propuse el objetivo de "matar" sensible a la sangría y no tiene una selección de bloque explícita con corchetes ( y ), los bloques están separados por sangrías (INDENT y OUTDENT), que esencialmente reemplazan los corchetes.



    
    Arriba