Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JenselG en 12 Enero 2021, 17:30 pm



Título: ¿Por que obtengo esta salida? C++
Publicado por: JenselG en 12 Enero 2021, 17:30 pm
Hola a todos.

Estoy creando un lenguaje de programacion en C++ y por ahora tengo parte del analizador lexico.
Recibe el codigo fuente en un string y devuelve un vector con los tokens.

Codigo del analizador léxico.
https://drive.google.com/file/d/1LvIGqBoTN8TDnrsHyqyjBmWc5cpQSA2d/view?usp=sharing

Codigo del archivo main
https://drive.google.com/file/d/1NU8jUpy6e37Zpzwp4nx1lKkL28stpu35/view?usp=sharing

Codigo de la clase Token
https://drive.google.com/file/d/1E9rxj4OOrasqVZ2n0wc1tP8wH-SEz9WP/view?usp=sharing


Se supone que la salida debe mostrar los tokens de esta forma:

Token {Tipo: <el tipo>, Lexema: <el lexema>, Linea: <numero de linea>}


Pero cuando tengo codigo multilinea, ocurre esto.

Entrada
(https://i.imgur.com/45RjtfU.png)

Salida
(https://i.imgur.com/uqLqtJb.png)

Tipo 8   significa cadena.
Tipo 52 significa fin de linea. (salto de linea)
Tipo 53 significa fin de archivo.

Mi pregunta es:

¿Por qué en la linea 3 de la salida, ademas de tomar el "Como", tambien toma el salto de linea y el "Estas"?.

He probado que solo cuando tengo codigo de mas de 2 lineas, cada 2 lineas en la salida ocurre eso, se lleva el primer lexema, el salto de linea y el lexema siguiente, todo ello en un solo token.

¿Por qué ocurre?

Toda orientacion/respuesta es aceptada, gracias.


Título: Re: ¿Por que obtengo esta salida? C++
Publicado por: [D]aniel en 12 Enero 2021, 22:24 pm
Hola, yo en mis tiempos de programador he tenido ese mismo problema y siempre era que los saltos de línea estaban mal insertados en el archivo a leer, pero en Python yo usaba algo para ver los \r y los \n que eso es justamente lo que tenés que revisar, o también lo inspeccionada con el editor de Notepad++ buscando por Expresiones regulares, revisa eso dentro del archivo donde tenés el "Hola cómo estás?.

Y si te preguntas como yo lo he solucionado, simplemente he corregido los saltos de línea para que estén correctamente insertados y hayan solamente los que tienen que haber, lo mismo con los retorno de carro.

Después de cada texto debe ir el \r\n, para cualquier PC todo lo que escribas es un solo texto largo y los editores y programas son los que los hacen bajar para ubicarlos en la línea de abajo, pero si miras un texto en crudo verás que todo va seguido, usando tu ejemplo deberías ver:


Código:
Hola\r\nComo\r\nEstas\r\n


Saludos