COMPORT – Compilador Portugol - Nilo Menezes
COMPORT – Compilador Portugol - Nilo Menezes
COMPORT – Compilador Portugol - Nilo Menezes
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
}<br />
}<br />
else<br />
Mark ("IDENTIFICADOR?");<br />
//NILO: Aqui vem o tipo da variável<br />
// if (sym == DOIS_PONTOS)<br />
// Get (sym);<br />
// else<br />
// Mark (":?");<br />
}<br />
}<br />
void<br />
fType (Type & type)<br />
{<br />
Object obj, first;<br />
Item x;<br />
Type tp;<br />
ComPort <strong>–</strong> <strong>Compilador</strong> <strong>Portugol</strong><br />
if (sym != IDENTIFICADOR && sym != MATRIZ && sym != REGISTRO &&<br />
sym != NUMERICO && sym !=LITERAL && sym !=LOGICO)<br />
{<br />
Mark ("Tipo ?");<br />
do<br />
{<br />
Get (sym);<br />
}<br />
while (sym != IDENTIFICADOR && sym !=NOVALINHA);<br />
}<br />
switch (sym) {<br />
case LITERAL:<br />
type = litType;<br />
Get(sym);<br />
break;<br />
case NUMERICO:<br />
type = intType;<br />
Get(sym);<br />
break;<br />
case LOGICO:<br />
type = boolType;<br />
Get(sym);<br />
break;<br />
case IDENTIFICADOR: // Tipo definido pelo usuário<br />
find (obj);<br />
Get (sym);<br />
if (obj->Class == Typ)<br />
type = obj->type;<br />
else<br />
Mark ("Tipo ?");<br />
break;<br />
case MATRIZ:<br />
Get (sym);<br />
expression (x);<br />
if (x.mode != Const || x.a < 0)<br />
Mark ("Índice inválido");<br />
// if (sym == of)<br />
// Get (sym);<br />
// else<br />
// Mark ("OF?");<br />
tp = new TypeDesc;<br />
type->form = MATRIZ;<br />
75