Numeros negativos en compiladores

Iniciado por danielo-, 17 Septiembre 2010, 06:01 AM

0 Miembros y 1 Visitante están viendo este tema.

danielo-

Hola a todos, tengo una duda acerca de la construccion de compiladores, especificamente en la construccion del analizador lexico, y es acerca de los numeros negativos, lo que pasa, que un token valido deberia de ser -343 no? realmente lo validaria en la tabla de simbolos como un numero negativo, pero que pasa si escribo
int o= 3-4?
Es decir si yo pongo
int o=-4     
En la tabla de simbolos entraria:
int variable = numero

pero y si yo escribo
int o=4-3
En la tabla de simbolos entraria:
int variable = numero numero

lo cual estaria mal, pues deberia entrar
int variable = numero - numero

no? cual seria la condicion para establecer esto? o acaso estoy equivocado?
Porfavor, alguien que me aclare mi duda :)

1mpuls0

defines que elementos van a delimitar a los tokens, esto es generalemente el signo de espacio, pero tambieen pueden ser los simbolos aritmeticos logicos, parentesis, puntos, comas etc, sigono = etc,
asi por ejem

si encuentra esto
*nt var= -23;
recoge int, que la identifica como palabra resevada
despues var, que al no ser una palabra reservada, la mete como variable a la talba e variables
despues el signo igual
cpn el signo no se
creo que depende de como lo quieras manejar
si seria 0  mnenos 23
o podria ser
-23

lo puedes manejar como el signo del numero o como una operacion y asi omites el signo del numero la verdad como nunca lo implemente.

intentale asi
int var= 3-4;
int variable= numero - numero
y
int var=-34;
int variable= 0 - numero


intentá asi, y si te sale lo rolas! xD
abc

danielo-

Umm... ya entendi tu punto, jaja.. creo que no estaba pensando, el problema con lo que me haz dicho primero, es que mi maestro nos dijo que hay una regla a seguir en el desarrollo de un analizador lexico, el fin de un automata, es el principio del segundo... esto es, que si yo pongo:
int var=1
me deberia reconocer
int variable = 1
a pesar de que se este pegado el texto(var=1),
pero ahora que lo pienso, es mi lenguaje, y yo puedo definir la sintaxis en especial del operador negativo
es decir que puedo especificar que si hay un - entonces es un signo negativo, pero si existe un -numero, entonces lo considerara como un numero negativo aun a pesar del contexto en el que se encuentre XD y problema solucionado :) ajajja... no se que tan tonto suene, pero pues asi lo are :) jajaja gracias por ayudarme a pensar... :S ya solo me falta una ultima duda y estara listo! =D