Want to create interactive content? It’s easy in Genially!

Get started free

Organizador gráfico Procesamiento léxico y sintáctico (lenguajes de programación)

Rogelio Servin Carbajal

Created on September 23, 2025

Start designing with a free template

Discover more than 1500 professional designs like these:

Transcript

Procesamiento sintáctico (Parsing)

Procesamiento léxico (Tokenización)

+ Info

Teoría gramatical

Análisis sintáctico (Parse + AST)

Organizador gráfico Procesamiento léxico y sintáctico (lenguajes de programación)

+ Info

Procesamiento léxico (Tokenización)

  • Definición: Conversión de la secuencia de caracteres del código fuente en una lista de tokens.
  • Características:
    • Reconoce palabras clave, identificadores, literales, operadores y separadores.
    • Elimina espacios en blanco y comentarios (normalmente).
    • Se fundamenta en expresiones regulares y autómatas finitos.
  • Ejemplos (tokens):
    • Python: Código: y = x + 5
    • Tokens: IDENT(y) ASSIGN(=) IDENT(x) PLUS(+) NUMBER(5).
    • C: Código: int main() { return 0; }
    • Tokens: KEYWORD(int) IDENT(main) LPAREN(() RPAREN()) LBRACE({) KEYWORD(return) NUMBER(0) SEMICOLON(;) RBRACE(}).
    • C++: std::vector<int> v; → IDENT(std) :: IDENT(vector) < KEYWORD(int) > IDENT(v) ;.
    • C#: Console.WriteLine("Hola"); → IDENT(Console) . IDENT(WriteLine) LPAREN STRING("Hola") RPAREN SEMICOLON.

Teoría gramatical

  • Definición: Conjunto de reglas formales (gramáticas) que definen la sintaxis del lenguaje.
  • Características:
    • Se usan gramáticas libres de contexto (CFG) para la mayoría de lenguajes de programación.
    • Se representan con BNF o EBNF: símbolos terminales y no terminales, reglas de producción.
  • Ejemplos (reglas EBNF):
    • Regla if_statement (estilo C):
    • if_statement ::= 'if' '(' expression ')' statement.
    • Regla for (simplificada, estilo Python):
    • for_statement ::= 'for' IDENT 'in' expression ':' suite.
    • Ejemplo en C#: if (x == 0) Console.WriteLine("zero"); cumple la regla anterior.

Procesamiento sintáctico (Parsing)

  • Definición: Construcción de una estructura jerárquica (árbol de sintaxis o AST) a partir de los tokens, conforme a la gramática del lenguaje.
  • Características:
    • Verifica que la secuencia de tokens siga las reglas sintácticas.
    • Produce un árbol de derivación o AST que representa la estructura del programa.
    • Técnicas: análisis descendente (LL) y ascendente (LR); uso de generadores de parsers (yacc, bison, ANTLR).
  • Ejemplos (árbol/estructura):
    • C++: Código: if (a > b) { cout << a; }
    • Estructura: IfStatement → Condition: (a > b) ; Body: { ExpressionStatement(cout << a) }.
    • Python: Código: for i in range(5): print(i) → AST con nodo For(target=i, iter=Call(range, 5), body=[Call(print, i)]).

Análisis sintáctico (Parse + AST)

  • Definición: Ejecución práctica de la teoría: construir el árbol, comprobar precedencia/asociatividad, y preparar para fases semánticas.
  • Características:
    • Maneja precedencia de operadores (p.ej., * antes que +).
    • Detecta y reporta errores de sintaxis; puede incluir estrategias de recuperación.
    • Genera un AST que se usa en generación de código, optimización o interpretación.
  • Ejemplos:
    • Expresión con precedencia (Python/C/C++): a + b * c → árbol donde * es hijo de la suma: (+ a (* b c)).
    • C (función simple): int add(int a, int b) { return a + b; } → AST con nodo FunctionDef(name=add, params=[a,b], body=[Return(a + b)]).