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.
ComPort <strong>–</strong> <strong>Compilador</strong> <strong>Portugol</strong><br />
{<br />
Object obj, first;<br />
Item x;<br />
Type tp;<br />
long L;<br />
if (sym != DECLARE && sym != DEFINA)<br />
{<br />
Mark ("declaração?");<br />
do // Pula o código até a próxima declaração de bloco<br />
{<br />
Get (sym);<br />
}<br />
while (EInicioDeDeclaracaoDefinicaoOuFim(sym));<br />
}<br />
do<br />
{<br />
switch (sym) {<br />
case DEFINA:<br />
{<br />
Get (sym);<br />
while (sym == IDENTIFICADOR)<br />
{<br />
NewObj (obj, Const);<br />
Get (sym);<br />
if (sym == IGUAL)<br />
Get (sym);<br />
else<br />
Mark ("= ?");<br />
expression (x);<br />
fprintf(stderr, "Constante %s definida como %d", id, x.a);<br />
if (x.mode == Const)<br />
{<br />
obj->val = x.a;<br />
obj->type = x.type;<br />
}<br />
else<br />
Mark ("A expressão não é uma constante!");<br />
if (sym == NOVALINHA)<br />
Get (sym);<br />
else<br />
Mark ("?");<br />
}<br />
break;<br />
}<br />
/* TODO: não há no portugol sintaxe para declaração de tipo */<br />
case TIPO:<br />
{<br />
Get (sym);<br />
while (sym == IDENTIFICADOR)<br />
{<br />
NewObj (obj, Typ);<br />
Get (sym);<br />
if (sym == IGUAL)<br />
Get (sym);<br />
else<br />
Mark ("=?");<br />
fType (obj->type);<br />
if (sym == NOVALINHA)<br />
Get (sym);<br />
else<br />
Mark ("?");<br />
77