Analizador léxico en C++
- Concepto de Tokens en Lexical Analyzer en C++
- El propósito del analizador léxico en C++
- Pasos para usar el 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.
- Identifica los tokens en el flujo de texto de entrada y los agrupa en categorías significativas.
- Proporciona información sobre cada token, como su tipo y valor, lo que ayuda a comprender el significado del texto de entrada.
- 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 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