Analizador léxico en C++

Muhammad Adil 12 octubre 2023
  1. Concepto de Tokens en Lexical Analyzer en C++
  2. El propósito del analizador léxico en C++
  3. Pasos para usar el analizador léxico en C++
Analizador léxico en C++

Un analizador léxico es un programa de computadora que divide un flujo de texto en tokens y marca su tipo. Toma la entrada como una secuencia de caracteres arbitrariamente larga, llamada cadena de entrada, y produce una salida como una o más secuencias de caracteres llamadas secuencias de token.

La salida puede ser las secuencias de tokens o simplemente la información suficiente para identificarlos de manera única.

Además, los analizadores léxicos generalmente se implementan como dos programas separados: uno que lee caracteres de un flujo de entrada y otro que genera tokens para cada palabra que encuentra.

Principalmente, el analizador léxico se puede utilizar para identificar errores en un archivo de texto, como errores de ortografía o errores de sintaxis. También se utiliza para detectar ciertos patrones en el lenguaje natural que podrían considerarse dañinos o peligrosos si se dan en la vida real.

Concepto de Tokens en Lexical Analyzer en C++

Los tokens son los componentes más pequeños e indivisibles de un programa. Hay varios tipos de tokens vinculados con cada idioma.

Los identificadores son los nombres que el usuario asigna a varias partes del programa, como funciones y parámetros. Se llaman así porque “identifican” una dirección de memoria específica.

Luego están las palabras clave, una colección de palabras utilizadas por el lenguaje para realizar diversas funciones. En C++, estos incluyen cout, cin, if, else, for, break, continue, etc.

Los signos de puntuación se utilizan para crear expresiones y declaraciones, y solo son útiles cuando se combinan con significantes o palabras clave en una declaración.

El propósito del analizador léxico en C++

Un analizador léxico realiza las siguientes tareas.

  1. Identifica los tokens en el flujo de texto de entrada y los agrupa en categorías significativas.
  2. Proporciona información sobre cada token, como su tipo y valor, lo que ayuda a comprender el significado del texto de entrada.
  3. Analiza el texto de entrada dividiéndolo en unidades de significado más pequeñas para que puedan analizarse más fácilmente.

Pasos para usar el analizador léxico en C++

Discutamos los pasos para usar un analizador léxico en C++.

  • Incluir archivos de cabecera.
  • Escribe una función para dividir la oración en tokens.
  • Defina tokens y reglas para cada tipo de token.
  • Escriba código para generar tokens desde la oración de entrada.
  • Pruebe y depure su código hasta que funcione correctamente.

Ejemplo del analizador léxico en C++:

#include <bits/stdc++.h>

#include <string>
using namespace std;

vector<string> demo = {
    "auto",   "break",   "case",  "char",     "const",  "continue", "default",
    "do",     "double",  "else",  "enum",     "extern", "float",    "for",
    "goto",   "if",      "int",   "signed",   "sizeof", "static",   "struct",
    "switch", "typedef", "union", "unsigned", "void",   "volatile", "while"};

vector<string> hello = {"-", "*", "=", "+", "/"};

vector<string> ten = {"67", "87", "5", "12", "90"};

vector<string> parenthesis = {"(", ")"};

vector<string> brackets = {"[", "]"};

void printout(string q) {
  if (find(demo.begin(), demo.end(), q) != demo.end())
    cout << q << " \t keyword\n";
  else if (find(hello.begin(), hello.end(), q) != hello.end())
    cout << q << " \t operator\n";
  else if (find(ten.begin(), ten.end(), q) != ten.end())
    cout << q << " \t number\n";
  else if (find(parenthesis.begin(), parenthesis.end(), q) != parenthesis.end())
    cout << q << " \t paranthesis\n";
  else if (find(brackets.begin(), brackets.end(), q) != brackets.end())

    cout << q << " \t seperator\n";
}

int main() {
  string line;
  vector<string> sample;

  while (getline(cin, line, ' ')) {
    sample.push_back(line);
  }
  for (auto q : sample) printout(q);

  return 0;
}

Haga clic aquí para ver la demostración en vivo del código como se mencionó anteriormente.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook