You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Implementação do não-terminal TAD01)function TAnalisadorSintatico._TAD(var CodigoAsm: string): string;02)var03) TADName: string;04) MetodosTADCodigo,05) MetodosTADCodAsm: string;06) Simb: TSimbolo;07)begin08) if FLexico.Token = tkIdentificador then begin09)10) if FSimbolos.SimboloRedeclarado(FLexico.Lexema) then11) raise ESinErro.CreateFmt(strErrSinIdentDuplicado, [FLexico.Linha, FLexico.Coluna, 12)FLexico.Lexema]);13)14) TADName := FLexico.Lexema;15)16) FLexico.ProximoToken;17)18) Simb := TSimbolo.Create(TADName, TipoSimboloClasse);19) FSimbolos.Instalar(Simb);20) Simb.TabelaMembros := FSimbolos.AbrirEscopo(TADName);21)22) _AtributosTAD;23)24) MetodosTADCodigo := _MetodosTAD(Simb, MetodosTADCodAsm);25)26) if (FLexico.Token = tkReservada) and (FLexico.Reservada = prFim) then begin27) FLexico.ProximoToken;28) end29) else30) raise ESinErro.CreateFmt(strErrSinTokenEsperado, [FLexico.Linha, FLexico.Coluna, 31)strLexReservadas[prFim]]);32)33) FSimbolos.FecharEscopo;34)35) Result := MetodosTADCodigo;36) CodigoAsm := MetodosTADCodAsm;37)38) if (FLexico.Token = tkEspecial) and (FLexico.Lexema = ';') then begin39) FLexico.ProximoToken;40) end41) else42) raise ESinErro.CreateFmt(strErrSinTokenEsperado, [FLexico.Linha, FLexico.Coluna, 43)';']);44) end45) else46) raise ESinErro.CreateFmt(strErrSinIdentEsperado, [FLexico.Linha, FLexico.Coluna]);47)end;