Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

TypeCheckerVisitor Class Reference

#include <typecheckervisitor.h>

Inheritance diagram for TypeCheckerVisitor:

Inheritance graph
[legend]
Collaboration diagram for TypeCheckerVisitor:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual ~TypeCheckerVisitor ()
VisitorReturnvisitAction (Action *action)
VisitorReturnvisitActStatement (ActStatement *actStatement)
VisitorReturnvisitArrayReference (ArrayReference *arrayReference)
VisitorReturnvisitArrayType (ArrayType *arrayType)
VisitorReturnvisitAssignStatement (AssignStatement *assignStatement)
VisitorReturnvisitAst (Ast *ast)
VisitorReturnvisitBehavior (Behavior *behavior)
VisitorReturnvisitBehaviorStatement (BehaviorStatement *behaviorStatement)
VisitorReturnvisitBinaryExpression (BinaryExpression *binaryExpression)
VisitorReturnvisitDeclaration (Declaration *declaration)
VisitorReturnvisitDoStatement (DoStatement *doStatement)
VisitorReturnvisitExpression (Expression *expression)
VisitorReturnvisitExpressionList (ExpressionList *expressionList)
VisitorReturnvisitFieldDeclaration (FieldDeclaration *fieldDeclaration)
VisitorReturnvisitFieldReference (FieldReference *fieldReference)
VisitorReturnvisitFieldType (FieldType *fieldType)
VisitorReturnvisitGuard (Guard *guard)
VisitorReturnvisitGuardedStatement (GuardedStatement *guardedStatement)
VisitorReturnvisitGuardExpression (GuardExpression *guardExpression)
VisitorReturnvisitGuardReceive (GuardReceive *guardReceive)
VisitorReturnvisitGuardTimeout (GuardTimeout *guardTimeout)
VisitorReturnvisitIdentifier (Identifier *identifier)
VisitorReturnvisitIdentifierList (IdentifierList *identifierList)
VisitorReturnvisitIfStatement (IfStatement *ifStatement)
VisitorReturnvisitImport (Import *import)
VisitorReturnvisitLeftSide (LeftSide *leftSide)
VisitorReturnvisitLeftSideList (LeftSideList *leftSideList)
VisitorReturnvisitMessage (Message *message)
VisitorReturnvisitMultipleArrayReference (MultipleArrayReference *multipleArrayReference)
VisitorReturnvisitProcess (Process *process)
VisitorReturnvisitProgram (Program *program)
VisitorReturnvisitRangeType (RangeType *rangeType)
VisitorReturnvisitReceiveStatement (ReceiveStatement *receiveStatement)
VisitorReturnvisitSendStatement (SendStatement *sendStatement)
VisitorReturnvisitSequentialAction (SequentialAction *sequentialAction)
VisitorReturnvisitSequentialBehavior (SequentialBehavior *sequentialBehavior)
VisitorReturnvisitSequentialDeclaration (SequentialDeclaration *sequentialDeclaration)
VisitorReturnvisitSequentialExpressionList (SequentialExpressionList *sequentialExpressionList)
VisitorReturnvisitSequentialFieldDeclaration (SequentialFieldDeclaration *sequentialFieldDeclaration)
VisitorReturnvisitSequentialGuardedStatement (SequentialGuardedStatement *sequentialGuardedStatement)
VisitorReturnvisitSequentialIdentifierList (SequentialIdentifierList *sequentialIdentifierList)
VisitorReturnvisitSequentialImport (SequentialImport *sequentialImport)
VisitorReturnvisitSequentialLeftSideList (SequentialLeftSideList *sequentialLeftSideList)
VisitorReturnvisitSequentialMessage (SequentialMessage *sequentialMessage)
VisitorReturnvisitSequentialProcess (SequentialProcess *sequentialProcess)
VisitorReturnvisitSequentialStatement (SequentialStatement *sequentialStatement)
VisitorReturnvisitSimpleAction (SimpleAction *simpleAction)
VisitorReturnvisitSimpleArrayReference (SimpleArrayReference *simpleArrayReference)
VisitorReturnvisitSimpleBehavior (SimpleBehavior *simpleBehavior)
VisitorReturnvisitSimpleDeclaration (SimpleDeclaration *simpleDeclaration)
VisitorReturnvisitSimpleExpressionList (SimpleExpressionList *simpleExpressionList)
VisitorReturnvisitSimpleFieldDeclaration (SimpleFieldDeclaration *simpleFieldDeclaration)
VisitorReturnvisitSimpleGuardedStatement (SimpleGuardedStatement *simpleGuardedStatement)
VisitorReturnvisitSimpleIdentifierList (SimpleIdentifierList *simpleIdentifierList)
VisitorReturnvisitSimpleImport (SimpleImport *simpleImport)
VisitorReturnvisitSimpleLeftSideList (SimpleLeftSideList *simpleLeftSideList)
VisitorReturnvisitSimpleMessage (SimpleMessage *simpleMessage)
VisitorReturnvisitSimpleProcess (SimpleProcess *simpleProcess)
VisitorReturnvisitSimpleStatement (SimpleStatement *simpleStatement)
VisitorReturnvisitSkipStatement (SkipStatement *skipStatement)
VisitorReturnvisitStartStatement (StartStatement *startStatement)
VisitorReturnvisitStatement (Statement *statement)
VisitorReturnvisitStopStatement (StopStatement *stopStatement)
VisitorReturnvisitStringLiteral (StringLiteral *stringLiteral)
VisitorReturnvisitIntegerLiteral (IntegerLiteral *integerLiteral)
VisitorReturnvisitType (Type *type)
VisitorReturnvisitUnaryExpression (UnaryExpression *unaryExpression)

Private Attributes

map< string, Type * > symbolTable
bool insert
bool forgetIt
vector< Ast * > stack

Constructor & Destructor Documentation

virtual TypeCheckerVisitor::~TypeCheckerVisitor  )  [inline, virtual]
 

Definition at line 19 of file typecheckervisitor.h.

00019 {}


Member Function Documentation

VisitorReturn * TypeCheckerVisitor::visitAction Action action  )  [virtual]
 

Implements Visitor.

Definition at line 9 of file typecheckervisitor.cpp.

00009                                                              {
00010         VisitorReturn *v= new VisitorReturn;
00011         return v;
00012 }

VisitorReturn * TypeCheckerVisitor::visitActStatement ActStatement actStatement  )  [virtual]
 

Implements Visitor.

Definition at line 14 of file typecheckervisitor.cpp.

References ActStatement::getExpression(), ActStatement::getIdentifier(), Identifier::getName(), Ast::getPosition(), Type::getTypeCode(), insert, Type::INTEGER, stack, symbolTable, Type::TIMEOUT, VisitorReturn::type, Ast::visit(), and Identifier::visit().

00014                                                                                {
00015         VisitorReturn *v= new VisitorReturn;
00016         Type *t = new Type(actStatement->getIdentifier()->getPosition(), Type::TIMEOUT);
00017         string str = actStatement->getIdentifier()->getName();
00018         
00019         map<string, Type*>::iterator i = this->symbolTable.find("@" + str);
00020         if(i != this->symbolTable.end()) {
00021                 t = this->symbolTable["@" + str];
00022                 this->symbolTable.erase("@" + str);
00023         }
00024         
00025         this->stack.push_back(t);
00026         this->insert = true;
00027         v = actStatement->getIdentifier()->visit(*this);
00028         this->insert = false;
00029         this->stack.pop_back();
00030         
00031         v = actStatement->getExpression()->visit(*this);
00032         if(v->type->getTypeCode() != Type::INTEGER) {
00033                 cerr << "Expression não é INTEGER\n";
00034                 exit(1);
00035         }
00036         
00037         return v; // essse return nao serve pra nada
00038 }

VisitorReturn * TypeCheckerVisitor::visitArrayReference ArrayReference arrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 40 of file typecheckervisitor.cpp.

00040                                                                                      {
00041         VisitorReturn *v= new VisitorReturn;
00042         return v;
00043 }

VisitorReturn * TypeCheckerVisitor::visitArrayType ArrayType arrayType  )  [virtual]
 

Implements Visitor.

Definition at line 45 of file typecheckervisitor.cpp.

00045                                                                       {
00046         VisitorReturn *v= new VisitorReturn;
00047         return v;
00048 }

VisitorReturn * TypeCheckerVisitor::visitAssignStatement AssignStatement assignStatement  )  [virtual]
 

Implements Visitor.

Definition at line 50 of file typecheckervisitor.cpp.

References AssignStatement::getExpressionList(), AssignStatement::getLeftSideList(), Type::getTypeCode(), VisitorReturn::type, and Ast::visit().

00050                                                                                         {
00051         VisitorReturn *v1, *v2;
00052 
00053         v1 = assignStatement->getLeftSideList()->visit(*this);
00054         v2 = assignStatement->getExpressionList()->visit(*this);
00055         
00056         if(v1->type->getTypeCode() != v2->type->getTypeCode()) {
00057                 cerr << "Tipos de expressoes não são iguais\n";
00058                 exit(1);
00059         }
00060                 
00061         return v1; // essse return nao serve pra nada
00062 }

VisitorReturn * TypeCheckerVisitor::visitAst Ast ast  )  [virtual]
 

Implements Visitor.

Definition at line 64 of file typecheckervisitor.cpp.

00064                                                     {
00065         VisitorReturn *v= new VisitorReturn;
00066         return v;
00067 }

VisitorReturn * TypeCheckerVisitor::visitBehavior Behavior behavior  )  [virtual]
 

Implements Visitor.

Definition at line 69 of file typecheckervisitor.cpp.

00069                                                                    {
00070         VisitorReturn *v= new VisitorReturn;
00071         return v;
00072 }

VisitorReturn * TypeCheckerVisitor::visitBehaviorStatement BehaviorStatement behaviorStatement  )  [virtual]
 

Implements Visitor.

Definition at line 74 of file typecheckervisitor.cpp.

References Type::BEHAVIOR, BehaviorStatement::getBehavior(), BehaviorStatement::getExpressionList(), Type::getTypeCode(), VisitorReturn::type, Ast::visit(), and Identifier::visit().

00074                                                                                               {
00075         VisitorReturn *v= new VisitorReturn;
00076         
00077         v = behaviorStatement->getBehavior()->visit(*this);
00078         if(v->type->getTypeCode() != Type::BEHAVIOR) {
00079                 cerr << "Behavior não é BEHAVIOR\n";
00080                 exit(1);
00081         }
00082         
00083         behaviorStatement->getExpressionList()->visit(*this);
00084         
00085         return v;
00086 }

VisitorReturn * TypeCheckerVisitor::visitBinaryExpression BinaryExpression binaryExpression  )  [virtual]
 

Implements Visitor.

Definition at line 88 of file typecheckervisitor.cpp.

References Type::BOOLEAN, BinaryExpression::getLeftExpression(), BinaryExpression::getOp(), Ast::getPosition(), BinaryExpression::getRightExpression(), Type::getTypeCode(), Type::INTEGER, VisitorReturn::type, and Ast::visit().

00088                                                                                            {
00089         VisitorReturn *v1, *v2;
00090         string op;
00091         Type *type;
00092 
00093         v1 = binaryExpression->getLeftExpression()->visit(*this);
00094         v2 = binaryExpression->getRightExpression()->visit(*this);
00095         op = binaryExpression->getOp();
00096         
00097         if(v1->type->getTypeCode() != v2->type->getTypeCode()) {
00098                 cerr << "Tipos de expressões binárias não são iguais\n";
00099                 exit(1);
00100         }
00101         
00102         if((op == "&") || (op == "|")) {
00103                 type = new Type(binaryExpression->getPosition(),Type::BOOLEAN);
00104                 if(v1->type->getTypeCode() != Type::BOOLEAN) {
00105                         cerr << "Operadores booleanos aplicados a expressões não booleanas\n";
00106                         exit(1);
00107                 }
00108         } else {
00109                 if((op == "+") || (op == "-") || (op == "*") || (op == "/")) {
00110                         type = new Type(binaryExpression->getPosition(),Type::INTEGER);
00111                 } else {
00112                         type = new Type(binaryExpression->getPosition(),Type::BOOLEAN);
00113                 }
00114                 if((v1->type->getTypeCode() != Type::INTEGER) && (op != "=")) {
00115                         cerr << "Operadores aritmeticos aplicados a expressões não inteiras\n";
00116                         exit(1);
00117                 }
00118         }
00119         
00120         v1->type = type;
00121                 
00122         return v1; 
00123 }

VisitorReturn * TypeCheckerVisitor::visitDeclaration Declaration declaration  )  [virtual]
 

Implements Visitor.

Definition at line 125 of file typecheckervisitor.cpp.

00125                                                                             {
00126         VisitorReturn *v= new VisitorReturn;
00127         return v;
00128 }

VisitorReturn * TypeCheckerVisitor::visitDoStatement DoStatement doStatement  )  [virtual]
 

Implements Visitor.

Definition at line 130 of file typecheckervisitor.cpp.

References DoStatement::getGuardedStatement(), and Ast::visit().

00130                                                                             {
00131         VisitorReturn *v= new VisitorReturn;
00132         
00133         v = doStatement->getGuardedStatement()->visit(*this);
00134         
00135         return v;
00136 }

VisitorReturn * TypeCheckerVisitor::visitExpression Expression expression  )  [virtual]
 

Implements Visitor.

Definition at line 138 of file typecheckervisitor.cpp.

00138                                                                          {
00139         VisitorReturn *v= new VisitorReturn;
00140         return v;
00141 }

VisitorReturn * TypeCheckerVisitor::visitExpressionList ExpressionList expressionList  )  [virtual]
 

Implements Visitor.

Definition at line 143 of file typecheckervisitor.cpp.

00143                                                                                      {
00144         VisitorReturn *v= new VisitorReturn;
00145         return v;
00146 }

VisitorReturn * TypeCheckerVisitor::visitFieldDeclaration FieldDeclaration fieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 148 of file typecheckervisitor.cpp.

00148                                                                                            {
00149         VisitorReturn *v= new VisitorReturn;
00150         return v;
00151 }

VisitorReturn * TypeCheckerVisitor::visitFieldReference FieldReference fieldReference  )  [virtual]
 

Implements Visitor.

Definition at line 153 of file typecheckervisitor.cpp.

References FieldReference::getFieldId(), FieldReference::getMsgId(), Identifier::getName(), symbolTable, and VisitorReturn::type.

00153                                                                                      {
00154         VisitorReturn *v= new VisitorReturn;
00155         string id;
00156         
00157         id = fieldReference->getMsgId()->getName() + "." + fieldReference->getFieldId()->getName();
00158         map<string, Type*>::iterator i = this->symbolTable.find(id);
00159         if(i == this->symbolTable.end()) {
00160                 cerr << "FieldReference não existe\n";
00161                 exit(1);
00162         }
00163         
00164         v->type = this->symbolTable[id];
00165         
00166         return v; 
00167 }

VisitorReturn * TypeCheckerVisitor::visitFieldType FieldType fieldType  )  [virtual]
 

Implements Visitor.

Definition at line 169 of file typecheckervisitor.cpp.

References FieldType::BIT, FieldType::getExpression(), SimpleMessage::getIdentifier(), Identifier::getName(), Ast::getPosition(), FieldType::getType(), Type::getTypeCode(), IntegerLiteral::getValue(), Type::INTEGER, stack, Type::STRING, symbolTable, and VisitorReturn::type.

00169                                                                       {
00170         VisitorReturn *v= new VisitorReturn;
00171         SimpleMessage *sm;
00172         Identifier *id;
00173         string str;
00174         bool ehInteger = true;
00175         IntegerLiteral *il = 0;
00176         
00177         if(typeid(*fieldType->getExpression()) == typeid(Identifier)) {
00178                 ehInteger = false;
00179                 sm = (SimpleMessage *)this->stack[this->stack.size()-1];
00180                 id = (Identifier *)fieldType->getExpression();
00181                 str = sm->getIdentifier()->getName() + "." + id->getName();
00182                 
00183                 map<string, Type*>::iterator i = this->symbolTable.find(str);
00184                 if(i == this->symbolTable.end()) {
00185                         cerr << "FieldReference não existe\n";
00186                         exit(1);
00187                 }
00188                 Type *t = (Type *)this->symbolTable[str];
00189                 if(t->getTypeCode()==Type::STRING) {
00190                         cerr << "Quantificador invalido, tipo bit requerido\n";
00191                         exit(1);
00192                 }
00193                 
00194         } else if(typeid(*fieldType->getExpression()) != typeid(IntegerLiteral)) {
00195                 cerr << "Quantificador invalido, constante ou nome de campo requerido\n";
00196                 exit(1);
00197         } else {
00198                 il = (IntegerLiteral *)fieldType->getExpression();
00199         }
00200         
00201         if(fieldType->getType() == FieldType::BIT && !ehInteger) {
00202                 cerr << "Se for bit só pode ser constante\n";
00203                 exit(1);
00204         } else if(ehInteger && (il->getValue() > 32) && (fieldType->getType() == FieldType::BIT)) {
00205                 cerr << "So pode ter no maximo 32 bits\n";
00206                 exit(1);
00207         }
00208         
00209         Type *type = new Type(fieldType->getPosition(), fieldType->getType() == FieldType::BIT ? Type::INTEGER : Type::STRING);
00210         v->type = type;
00211         return v;
00212 }

VisitorReturn * TypeCheckerVisitor::visitGuard Guard guard  )  [virtual]
 

Implements Visitor.

Definition at line 214 of file typecheckervisitor.cpp.

00214                                                           {
00215         VisitorReturn *v= new VisitorReturn;
00216         return v;
00217 }

VisitorReturn * TypeCheckerVisitor::visitGuardedStatement GuardedStatement guardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 219 of file typecheckervisitor.cpp.

00219                                                                                            {
00220         VisitorReturn *v= new VisitorReturn;
00221         return v;
00222 }

VisitorReturn * TypeCheckerVisitor::visitGuardExpression GuardExpression guardExpression  )  [virtual]
 

Implements Visitor.

Definition at line 224 of file typecheckervisitor.cpp.

References Type::BOOLEAN, GuardExpression::getExpression(), Type::getTypeCode(), VisitorReturn::type, and Ast::visit().

00224                                                                                         {
00225         VisitorReturn *v= new VisitorReturn;
00226         
00227         v = guardExpression->getExpression()->visit(*this);
00228         if(v->type->getTypeCode() != Type::BOOLEAN) {
00229                 cerr << "A guarda tem que ser booleana\n";
00230                 exit(1);
00231         }
00232         return v;
00233 }

VisitorReturn * TypeCheckerVisitor::visitGuardReceive GuardReceive guardReceive  )  [virtual]
 

Implements Visitor.

Definition at line 235 of file typecheckervisitor.cpp.

References GuardReceive::getReceiveStatement(), and ReceiveStatement::visit().

00235                                                                                {
00236         VisitorReturn *v= new VisitorReturn;
00237         guardReceive->getReceiveStatement()->visit(*this);
00238         return v;
00239 }

VisitorReturn * TypeCheckerVisitor::visitGuardTimeout GuardTimeout guardTimeout  )  [virtual]
 

Implements Visitor.

Definition at line 241 of file typecheckervisitor.cpp.

References forgetIt, GuardTimeout::getIdentifier(), Type::getTypeCode(), Type::TIMEOUT, VisitorReturn::type, and Identifier::visit().

00241                                                                                {
00242         VisitorReturn *v= new VisitorReturn;
00243         
00244         this->forgetIt = true;
00245         v = guardTimeout->getIdentifier()->visit(*this);
00246         this->forgetIt = false;
00247         
00248         if(v->type->getTypeCode() != Type::TIMEOUT) {
00249                 cerr << "O identifier tem que ser um timeout\n";
00250                 exit(1);
00251         }
00252         
00253         return v;
00254 }

VisitorReturn * TypeCheckerVisitor::visitIdentifier Identifier identifier  )  [virtual]
 

Implements Visitor.

Definition at line 256 of file typecheckervisitor.cpp.

References forgetIt, Identifier::getName(), Ast::getPosition(), insert, stack, symbolTable, Type::TIMEOUT, and VisitorReturn::type.

00256                                                                          {
00257         VisitorReturn *v = new VisitorReturn;
00258         Type *t = 0;
00259         
00260         if(this->insert) {
00261                 t = (Type *)this->stack[this->stack.size()-1];
00262                 map<string, Type*>::iterator i = this->symbolTable.find(identifier->getName());
00263                 if(i != this->symbolTable.end()) {
00264                         cerr << "identifier jah declarado\n";
00265                         exit(1);
00266                 }
00267                 this->symbolTable[identifier->getName()] = t;
00268                 v->type = t;
00269         } else {
00270                 string str = identifier->getName();
00271                 map<string, Type*>::iterator i = this->symbolTable.find(str);
00272                 if(i == this->symbolTable.end()) {
00273                         if(!this->forgetIt) {
00274                                 cerr << "identifier nao declarado\n";
00275                                 exit(1);
00276                         } else {
00277                                 str = "@" + str;
00278                                 this->symbolTable[str] = new Type(identifier->getPosition(), Type::TIMEOUT);
00279                         }
00280                 }
00281                 t = this->symbolTable[str];
00282                 v->type = t;
00283         }
00284         return v;
00285 }

VisitorReturn * TypeCheckerVisitor::visitIdentifierList IdentifierList identifierList  )  [virtual]
 

Implements Visitor.

Definition at line 287 of file typecheckervisitor.cpp.

00287                                                                                      {
00288         VisitorReturn *v= new VisitorReturn;
00289         return v;
00290 }

VisitorReturn * TypeCheckerVisitor::visitIfStatement IfStatement ifStatement  )  [virtual]
 

Implements Visitor.

Definition at line 292 of file typecheckervisitor.cpp.

References IfStatement::getGuardedStatement(), and Ast::visit().

00292                                                                             {
00293         VisitorReturn *v= new VisitorReturn;
00294         ifStatement->getGuardedStatement()->visit(*this);
00295         return v;
00296 }

VisitorReturn * TypeCheckerVisitor::visitImport Import import  )  [virtual]
 

Implements Visitor.

Definition at line 298 of file typecheckervisitor.cpp.

00298                                                              {
00299         VisitorReturn *v= new VisitorReturn;
00300         return v;
00301 }

VisitorReturn * TypeCheckerVisitor::visitIntegerLiteral IntegerLiteral integerLiteral  )  [virtual]
 

Implements Visitor.

Definition at line 735 of file typecheckervisitor.cpp.

References Ast::getPosition(), Type::INTEGER, and VisitorReturn::type.

00735                                                                                      {
00736         VisitorReturn *v= new VisitorReturn;
00737         v->type = new Type(integerLiteral->getPosition(),Type::INTEGER);
00738         return v;
00739 }

VisitorReturn * TypeCheckerVisitor::visitLeftSide LeftSide leftSide  )  [virtual]
 

Implements Visitor.

Definition at line 303 of file typecheckervisitor.cpp.

00303                                                                    {
00304         VisitorReturn *v= new VisitorReturn;
00305         return v;
00306 }

VisitorReturn * TypeCheckerVisitor::visitLeftSideList LeftSideList leftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 308 of file typecheckervisitor.cpp.

00308                                                                                {
00309         VisitorReturn *v= new VisitorReturn;
00310         return v;
00311 }

VisitorReturn * TypeCheckerVisitor::visitMessage Message message  )  [virtual]
 

Implements Visitor.

Definition at line 313 of file typecheckervisitor.cpp.

00313                                                                 {
00314         VisitorReturn *v= new VisitorReturn;
00315         return v;
00316 }

VisitorReturn * TypeCheckerVisitor::visitMultipleArrayReference MultipleArrayReference multipleArrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 318 of file typecheckervisitor.cpp.

References Type::ARRAY, MultipleArrayReference::getArrayReference(), MultipleArrayReference::getExpression(), Ast::getPosition(), Type::getTypeCode(), Type::INTEGER, VisitorReturn::type, and Ast::visit().

00318                                                                                                              {
00319         VisitorReturn *v= new VisitorReturn;
00320         v = multipleArrayReference->getArrayReference()->visit(*this);
00321         if(v->type->getTypeCode() != Type::ARRAY) {
00322                 cerr << "A referencia do array deve ser um ARRAY\n";
00323                 exit(1);
00324         }
00325         v = multipleArrayReference->getExpression()->visit(*this);
00326         if(v->type->getTypeCode() != Type::INTEGER) {
00327                 cerr << "A expression do array deve ser um INTEGER\n";
00328                 exit(1);
00329         }
00330         Type *type = new Type(multipleArrayReference->getPosition(), Type::ARRAY);
00331         v->type = type;
00332         return v;
00333 }

VisitorReturn * TypeCheckerVisitor::visitProcess Process process  )  [virtual]
 

Implements Visitor.

Definition at line 335 of file typecheckervisitor.cpp.

00335                                                                 {
00336         VisitorReturn *v= new VisitorReturn;
00337         return v;
00338 }

VisitorReturn * TypeCheckerVisitor::visitProgram Program program  )  [virtual]
 

Implements Visitor.

Definition at line 340 of file typecheckervisitor.cpp.

References Program::getBehavior(), Program::getImport(), Program::getMessage(), Program::getProcess(), Type::PROCESS, symbolTable, and Ast::visit().

00340                                                                 {
00341         VisitorReturn *v= new VisitorReturn;
00342         if(program->getImport())
00343                 program->getImport()->visit(*this);
00344         if(program->getBehavior())
00345                 program->getBehavior()->visit(*this);
00346 
00347         program->getMessage()->visit(*this);
00348         program->getProcess()->visit(*this);
00349 
00350 
00351         map<string, Type*>::iterator i = this->symbolTable.begin();
00352         bool mainExists = false;
00353 
00354         while(i != this->symbolTable.end()) {
00355                 if((*i).first[0] == '@') {
00356                         cerr << "Existem identificadores invalidos\n";
00357                         exit(1);
00358                 }
00359                 if(!mainExists && ((*i).first == "main") && ((*i).second->getTypeCode() == Type::PROCESS)) {
00360                         mainExists = true;
00361                 }
00362                 i++;
00363         }
00364 
00365         if(!mainExists) {
00366                 cerr << "Tem que haver um processo chamado \"main\"\n";
00367                 exit(1);
00368         }
00369         
00370         return v;
00371 }

VisitorReturn * TypeCheckerVisitor::visitRangeType RangeType rangeType  )  [virtual]
 

Implements Visitor.

Definition at line 373 of file typecheckervisitor.cpp.

00373                                                                       {
00374         VisitorReturn *v= new VisitorReturn;
00375         return v;
00376 }

VisitorReturn * TypeCheckerVisitor::visitReceiveStatement ReceiveStatement receiveStatement  )  [virtual]
 

Implements Visitor.

Definition at line 378 of file typecheckervisitor.cpp.

References Type::ADDRESS, ReceiveStatement::getAddrId(), ReceiveStatement::getMsgId(), Type::getTypeCode(), Type::MESSAGE, VisitorReturn::type, and Identifier::visit().

00378                                                                                            {
00379         VisitorReturn *v= new VisitorReturn;
00380         v = receiveStatement->getMsgId()->visit(*this);
00381         if(v->type->getTypeCode() != Type::MESSAGE) {
00382                 cerr << "O identifier não representa uma mensagem\n";
00383                 exit(1);
00384         }
00385         v = receiveStatement->getAddrId()->visit(*this);
00386         if(v->type->getTypeCode() != Type::ADDRESS) {
00387                 cerr << "O identifier não representa um ADDRESS\n";
00388                 exit(1);
00389         }
00390         return v;
00391 }

VisitorReturn * TypeCheckerVisitor::visitSendStatement SendStatement sendStatement  )  [virtual]
 

Implements Visitor.

Definition at line 393 of file typecheckervisitor.cpp.

References Type::ADDRESS, SendStatement::getAddrId(), SendStatement::getMsgId(), Type::getTypeCode(), Type::MESSAGE, VisitorReturn::type, and Identifier::visit().

00393                                                                                   {
00394         VisitorReturn *v= new VisitorReturn;
00395         v = sendStatement->getMsgId()->visit(*this);
00396         if(v->type->getTypeCode() != Type::MESSAGE) {
00397                 cerr << "O identifier não representa uma mensagem\n";
00398                 exit(1);
00399         }
00400         v = sendStatement->getAddrId()->visit(*this);
00401         if(v->type->getTypeCode() != Type::ADDRESS) {
00402                 cerr << "O identifier não representa um ADDRESS\n";
00403                 exit(1);
00404         }
00405         return v;
00406 }

VisitorReturn * TypeCheckerVisitor::visitSequentialAction SequentialAction sequentialAction  )  [virtual]
 

Implements Visitor.

Definition at line 408 of file typecheckervisitor.cpp.

References SequentialAction::getAction(), SequentialAction::getSimpleAction(), SimpleAction::visit(), and Ast::visit().

00408                                                                                            {
00409         VisitorReturn *v= new VisitorReturn;
00410         sequentialAction->getAction()->visit(*this);
00411         sequentialAction->getSimpleAction()->visit(*this);
00412         return v;
00413 }

VisitorReturn * TypeCheckerVisitor::visitSequentialBehavior SequentialBehavior sequentialBehavior  )  [virtual]
 

Implements Visitor.

Definition at line 415 of file typecheckervisitor.cpp.

References SequentialBehavior::getBehavior(), SequentialBehavior::getSimpleBehavior(), SimpleBehavior::visit(), and Ast::visit().

00415                                                                                                  {
00416         VisitorReturn *v= new VisitorReturn;
00417         sequentialBehavior->getBehavior()->visit(*this);
00418         sequentialBehavior->getSimpleBehavior()->visit(*this);
00419         return v;
00420 }

VisitorReturn * TypeCheckerVisitor::visitSequentialDeclaration SequentialDeclaration sequentialDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 422 of file typecheckervisitor.cpp.

References SequentialDeclaration::getDeclaration(), SequentialDeclaration::getSimpleDeclaration(), SimpleDeclaration::visit(), and Ast::visit().

00422                                                                                                           {
00423         VisitorReturn *v= new VisitorReturn;
00424    
00425         if(sequentialDeclaration->getDeclaration())
00426                 sequentialDeclaration->getDeclaration()->visit(*this);
00427         if(sequentialDeclaration->getSimpleDeclaration())
00428                 sequentialDeclaration->getSimpleDeclaration()->visit(*this);
00429         return v;
00430 }

VisitorReturn * TypeCheckerVisitor::visitSequentialExpressionList SequentialExpressionList sequentialExpressionList  )  [virtual]
 

Implements Visitor.

Definition at line 432 of file typecheckervisitor.cpp.

References SequentialExpressionList::getExpressionList(), SequentialExpressionList::getSimpleExpressionList(), stack, VisitorReturn::type, SimpleExpressionList::visit(), and Ast::visit().

00432                                                                                                                    {
00433         VisitorReturn *v= new VisitorReturn;
00434    
00435         v = sequentialExpressionList->getExpressionList()->visit(*this);
00436         this->stack.push_back(v->type);
00437         v = sequentialExpressionList->getSimpleExpressionList()->visit(*this);
00438         this->stack.push_back(v->type);
00439                         
00440         return v;
00441 }

VisitorReturn * TypeCheckerVisitor::visitSequentialFieldDeclaration SequentialFieldDeclaration sequentialFieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 443 of file typecheckervisitor.cpp.

References SequentialFieldDeclaration::getFieldDeclaration(), SequentialFieldDeclaration::getSimpleFieldDeclaration(), SimpleFieldDeclaration::visit(), and Ast::visit().

00443                                                                                                                          {
00444         VisitorReturn *v= new VisitorReturn;
00445    
00446         sequentialFieldDeclaration->getFieldDeclaration()->visit(*this);
00447         sequentialFieldDeclaration->getSimpleFieldDeclaration()->visit(*this);
00448         
00449         return v;
00450 }

VisitorReturn * TypeCheckerVisitor::visitSequentialGuardedStatement SequentialGuardedStatement sequentialGuardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 452 of file typecheckervisitor.cpp.

References SequentialGuardedStatement::getGuardedStatement(), SequentialGuardedStatement::getSimpleGuardedStatement(), SimpleGuardedStatement::visit(), and Ast::visit().

00452                                                                                                                          {
00453         VisitorReturn *v= new VisitorReturn;
00454    
00455         sequentialGuardedStatement->getGuardedStatement()->visit(*this);
00456         sequentialGuardedStatement->getSimpleGuardedStatement()->visit(*this);
00457         
00458         return v;
00459 }

VisitorReturn * TypeCheckerVisitor::visitSequentialIdentifierList SequentialIdentifierList sequentialIdentifierList  )  [virtual]
 

Implements Visitor.

Definition at line 461 of file typecheckervisitor.cpp.

References SequentialIdentifierList::getIdentifierList(), SequentialIdentifierList::getSimpleIdentifierList(), SimpleIdentifierList::visit(), and Ast::visit().

00461                                                                                                                    {
00462         VisitorReturn *v= new VisitorReturn;
00463    
00464         sequentialIdentifierList->getIdentifierList()->visit(*this);
00465         sequentialIdentifierList->getSimpleIdentifierList()->visit(*this);
00466         
00467         return v;
00468 }

VisitorReturn * TypeCheckerVisitor::visitSequentialImport SequentialImport sequentialImport  )  [virtual]
 

Implements Visitor.

Definition at line 470 of file typecheckervisitor.cpp.

References SequentialImport::getImport(), SequentialImport::getSimpleImport(), SimpleImport::visit(), and Ast::visit().

00470                                                                                            {
00471         VisitorReturn *v= new VisitorReturn;
00472    
00473         sequentialImport->getImport()->visit(*this);
00474         sequentialImport->getSimpleImport()->visit(*this);
00475         
00476         return v;
00477 }

VisitorReturn * TypeCheckerVisitor::visitSequentialLeftSideList SequentialLeftSideList sequentialLeftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 479 of file typecheckervisitor.cpp.

References SequentialLeftSideList::getLeftSideList(), SequentialLeftSideList::getSimpleLeftSideList(), stack, VisitorReturn::type, SimpleLeftSideList::visit(), and Ast::visit().

00479                                                                                                              {
00480         VisitorReturn *v= new VisitorReturn;
00481    
00482         v = sequentialLeftSideList->getLeftSideList()->visit(*this);
00483         this->stack.push_back(v->type);
00484         v = sequentialLeftSideList->getSimpleLeftSideList()->visit(*this);
00485         this->stack.push_back(v->type);
00486 
00487         return v;
00488 }

VisitorReturn * TypeCheckerVisitor::visitSequentialMessage SequentialMessage sequentialMessage  )  [virtual]
 

Implements Visitor.

Definition at line 490 of file typecheckervisitor.cpp.

References SequentialMessage::getMessage(), SequentialMessage::getSimpleMessage(), SimpleMessage::visit(), and Ast::visit().

00490                                                                                               {
00491         VisitorReturn *v= new VisitorReturn;
00492    sequentialMessage->getMessage()->visit(*this);
00493         sequentialMessage->getSimpleMessage()->visit(*this);
00494         
00495         return v;
00496 }

VisitorReturn * TypeCheckerVisitor::visitSequentialProcess SequentialProcess sequentialProcess  )  [virtual]
 

Implements Visitor.

Definition at line 498 of file typecheckervisitor.cpp.

References SequentialProcess::getProcess(), SequentialProcess::getSimpleProcess(), SimpleProcess::visit(), and Ast::visit().

00498                                                                                               {
00499         VisitorReturn *v= new VisitorReturn;
00500    sequentialProcess->getProcess()->visit(*this);
00501         sequentialProcess->getSimpleProcess()->visit(*this);
00502         return v;
00503 }

VisitorReturn * TypeCheckerVisitor::visitSequentialStatement SequentialStatement sequentialStatement  )  [virtual]
 

Implements Visitor.

Definition at line 505 of file typecheckervisitor.cpp.

References SequentialStatement::getSimpleStatement(), SequentialStatement::getStatement(), and Ast::visit().

00505                                                                                                     {
00506         VisitorReturn *v= new VisitorReturn;
00507    
00508         sequentialStatement->getStatement()->visit(*this);
00509         sequentialStatement->getSimpleStatement()->visit(*this);
00510         
00511         return v;
00512 }

VisitorReturn * TypeCheckerVisitor::visitSimpleAction SimpleAction simpleAction  )  [virtual]
 

Implements Visitor.

Definition at line 514 of file typecheckervisitor.cpp.

References SimpleAction::getGuard(), SimpleAction::getStatement(), and Ast::visit().

00514                                                                                {
00515         VisitorReturn *v= new VisitorReturn;
00516         
00517         simpleAction->getGuard()->visit(*this);
00518         simpleAction->getStatement()->visit(*this);
00519         
00520         return v;
00521 }

VisitorReturn * TypeCheckerVisitor::visitSimpleArrayReference SimpleArrayReference simpleArrayReference  )  [virtual]
 

Implements Visitor.

Definition at line 523 of file typecheckervisitor.cpp.

References Type::ARRAY, SimpleArrayReference::getExpression(), SimpleArrayReference::getIdentifier(), Ast::getPosition(), ArrayType::getType(), Type::getTypeCode(), Type::INTEGER, VisitorReturn::type, Ast::visit(), and Identifier::visit().

00523                                                                                                        {
00524         VisitorReturn *v1, *v2;
00525         
00526         v1 = simpleArrayReference->getIdentifier()->visit(*this);
00527         if(v1->type->getTypeCode() != Type::ARRAY) {
00528                 cerr << "Identifier tem que ser ARRAY\n";
00529                 exit(1);
00530         }
00531         v2 = simpleArrayReference->getExpression()->visit(*this);
00532         if(v2->type->getTypeCode() != Type::INTEGER) {
00533                 cerr << "Expressao tem que ser INTEGER\n";
00534                 exit(1);
00535         }
00536         ArrayType *arrayType = (ArrayType*)v1->type;
00537         
00538         Type *type = new Type(simpleArrayReference->getPosition(), arrayType->getType()->getTypeCode());
00539         v1->type = type;
00540         
00541         return v1;
00542 }

VisitorReturn * TypeCheckerVisitor::visitSimpleBehavior SimpleBehavior simpleBehavior  )  [virtual]
 

Implements Visitor.

Definition at line 544 of file typecheckervisitor.cpp.

References Type::BEHAVIOR, SimpleBehavior::getIdentifierList(), Ast::getPosition(), insert, stack, and Ast::visit().

00544                                                                                      {
00545         VisitorReturn *v= new VisitorReturn;
00546         Type *type = new Type(simpleBehavior->getPosition(), Type::BEHAVIOR);
00547         
00548         this->stack.push_back(type);
00549         this->insert = true;
00550         simpleBehavior->getIdentifierList()->visit(*this);
00551         this->stack.pop_back();
00552         this->insert = false;
00553         return v;
00554 }

VisitorReturn * TypeCheckerVisitor::visitSimpleDeclaration SimpleDeclaration simpleDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 556 of file typecheckervisitor.cpp.

References SimpleDeclaration::getExpression(), SimpleDeclaration::getIdentifierList(), SimpleDeclaration::getType(), Type::getTypeCode(), insert, stack, VisitorReturn::type, Type::visit(), and Ast::visit().

00556                                                                                               {
00557         VisitorReturn *v1, *v2;
00558         
00559         this->stack.push_back(simpleDeclaration->getType());
00560         this->insert = true;
00561         
00562         simpleDeclaration->getIdentifierList()->visit(*this);
00563         this->stack.pop_back();
00564         this->insert = false;
00565         
00566         
00567         v2 = simpleDeclaration->getType()->visit(*this);
00568         if(simpleDeclaration->getExpression()) {
00569                 v1 = simpleDeclaration->getExpression()->visit(*this);
00570 
00571                 if(v1->type->getTypeCode() != v2->type->getTypeCode()) {
00572                         cerr << "Declaracao e expressao tem tipos diferentes\n";
00573                         exit(1);
00574                 }
00575         }
00576         
00577         return v2; // esse retormo nao servepra nada
00578 }

VisitorReturn * TypeCheckerVisitor::visitSimpleExpressionList SimpleExpressionList simpleExpressionList  )  [virtual]
 

Implements Visitor.

Definition at line 580 of file typecheckervisitor.cpp.

References SimpleExpressionList::getExpression(), and Ast::visit().

00580                                                                                                        {
00581         VisitorReturn *v= new VisitorReturn;
00582         v = simpleExpressionList->getExpression()->visit(*this);
00583         return v;
00584 }

VisitorReturn * TypeCheckerVisitor::visitSimpleFieldDeclaration SimpleFieldDeclaration simpleFieldDeclaration  )  [virtual]
 

Implements Visitor.

Definition at line 586 of file typecheckervisitor.cpp.

References SimpleFieldDeclaration::getExpression(), SimpleFieldDeclaration::getFieldType(), SimpleFieldDeclaration::getIdentifier(), SimpleMessage::getIdentifier(), Identifier::getName(), Type::getTypeCode(), stack, symbolTable, VisitorReturn::type, Ast::visit(), and FieldType::visit().

00586                                                                                                              {
00587         VisitorReturn *v1, *v2;
00588         SimpleMessage *sm;
00589         string str;
00590         
00591         
00592         v2 = simpleFieldDeclaration->getFieldType()->visit(*this);
00593         
00594         if(simpleFieldDeclaration->getExpression()) {
00595                 v1 = simpleFieldDeclaration->getExpression()->visit(*this);
00596         
00597                 if(v1->type->getTypeCode() != v2->type->getTypeCode()) {
00598                         cerr << "Declaracao e expressao tem tipos diferentes\n";
00599                         exit(1);
00600                 }
00601         }
00602         
00603         sm = (SimpleMessage *)this->stack[this->stack.size()-1];
00604         str = sm->getIdentifier()->getName() + "." + simpleFieldDeclaration->getIdentifier()->getName();
00605         
00606         map<string, Type*>::iterator i = this->symbolTable.find(str);
00607         if(i != this->symbolTable.end()) {
00608                 cerr << "Nome do campo já existe\n";
00609                 exit(1);
00610         }
00611         
00612         this->symbolTable[str] = v2->type;
00613         
00614         return v2; // esse retormo nao servepra nada
00615 }

VisitorReturn * TypeCheckerVisitor::visitSimpleGuardedStatement SimpleGuardedStatement simpleGuardedStatement  )  [virtual]
 

Implements Visitor.

Definition at line 617 of file typecheckervisitor.cpp.

References Type::BOOLEAN, SimpleGuardedStatement::getExpression(), SimpleGuardedStatement::getStatement(), Type::getTypeCode(), VisitorReturn::type, and Ast::visit().

00617                                                                                                              {
00618         VisitorReturn *v= new VisitorReturn;
00619         
00620         // \_:D_/
00621         simpleGuardedStatement->getStatement()->visit(*this);
00622         
00623         v = simpleGuardedStatement->getExpression()->visit(*this);
00624         if(v->type->getTypeCode() != Type::BOOLEAN) {
00625                 cerr << "A guarda tem que conter uma expressao booleana \\_:D_/\n";
00626                 exit(1);
00627         }
00628         
00629         return v;
00630 }

VisitorReturn * TypeCheckerVisitor::visitSimpleIdentifierList SimpleIdentifierList simpleIdentifierList  )  [virtual]
 

Implements Visitor.

Definition at line 632 of file typecheckervisitor.cpp.

References SimpleIdentifierList::getIdentifier(), and Identifier::visit().

00632                                                                                                        {
00633         VisitorReturn *v= new VisitorReturn;
00634         simpleIdentifierList->getIdentifier()->visit(*this);
00635         return v;
00636 }

VisitorReturn * TypeCheckerVisitor::visitSimpleImport SimpleImport simpleImport  )  [virtual]
 

Implements Visitor.

Definition at line 638 of file typecheckervisitor.cpp.

00638                                                                                {
00639         VisitorReturn *v= new VisitorReturn; // \_:)_/   \_:D_/   
00640         return v;
00641 }

VisitorReturn * TypeCheckerVisitor::visitSimpleLeftSideList SimpleLeftSideList simpleLeftSideList  )  [virtual]
 

Implements Visitor.

Definition at line 643 of file typecheckervisitor.cpp.

References SimpleLeftSideList::getLeftSide(), and Ast::visit().

00643                                                                                                  {
00644         VisitorReturn *v= new VisitorReturn;
00645         v = simpleLeftSideList->getLeftSide()->visit(*this);
00646         return v;
00647 }

VisitorReturn * TypeCheckerVisitor::visitSimpleMessage SimpleMessage simpleMessage  )  [virtual]
 

Implements Visitor.

Definition at line 649 of file typecheckervisitor.cpp.

References SimpleMessage::getFieldDeclaration(), SimpleMessage::getIdentifier(), Ast::getPosition(), insert, Type::MESSAGE, stack, Ast::visit(), and Identifier::visit().

00649                                                                                   {
00650         VisitorReturn *v= new VisitorReturn;
00651         Type *type = new Type(simpleMessage->getPosition(), Type::MESSAGE);
00652         
00653         this->stack.push_back(simpleMessage);
00654         this->stack.push_back(type);
00655         this->insert = true;
00656         simpleMessage->getIdentifier()->visit(*this);
00657         this->stack.pop_back();
00658         this->insert = false;
00659         
00660         simpleMessage->getFieldDeclaration()->visit(*this);
00661         this->stack.pop_back();
00662         
00663         return v;
00664 }

VisitorReturn * TypeCheckerVisitor::visitSimpleProcess SimpleProcess simpleProcess  )  [virtual]
 

Implements Visitor.

Definition at line 666 of file typecheckervisitor.cpp.

References SimpleProcess::getAction(), SimpleProcess::getDeclaration(), SimpleProcess::getIdentifier(), Identifier::getName(), Ast::getPosition(), insert, Type::PROCESS, stack, symbolTable, Ast::visit(), and Identifier::visit().

00666                                                                                   {
00667         VisitorReturn *v= new VisitorReturn;
00668         Type *type = new Type(simpleProcess->getPosition(), Type::PROCESS);
00669 
00670         this->stack.push_back(type);
00671         this->insert = true;
00672         v = simpleProcess->getIdentifier()->visit(*this);
00673         this->stack.pop_back();
00674         this->insert = false;
00675         
00676         string str = "@";
00677         
00678         str += simpleProcess->getIdentifier()->getName();
00679         map<string, Type*>::iterator i = this->symbolTable.find(str);
00680         if(i != this->symbolTable.end()) {
00681                 this->symbolTable.erase(str);
00682         }
00683         
00684         simpleProcess->getDeclaration()->visit(*this);
00685         simpleProcess->getAction()->visit(*this);
00686         
00687         return v;
00688 }

VisitorReturn * TypeCheckerVisitor::visitSimpleStatement SimpleStatement simpleStatement  )  [virtual]
 

Implements Visitor.

Definition at line 690 of file typecheckervisitor.cpp.

00690                                                                                         {
00691         VisitorReturn *v= new VisitorReturn;
00692         return v;
00693 }

VisitorReturn * TypeCheckerVisitor::visitSkipStatement SkipStatement skipStatement  )  [virtual]
 

Implements Visitor.

Definition at line 695 of file typecheckervisitor.cpp.

00695                                                                                   {
00696         VisitorReturn *v= new VisitorReturn;
00697         return v;
00698 }

VisitorReturn * TypeCheckerVisitor::visitStartStatement StartStatement startStatement  )  [virtual]
 

Implements Visitor.

Definition at line 700 of file typecheckervisitor.cpp.

References StartStatement::getIdentifier(), Identifier::getName(), Ast::getPosition(), Type::getTypeCode(), Type::PROCESS, symbolTable, VisitorReturn::type, and Identifier::visit().

00700                                                                                      {
00701         VisitorReturn *v= new VisitorReturn;
00702         string str = "@";
00703         
00704         str += startStatement->getIdentifier()->getName();
00705         map<string, Type*>::iterator i = this->symbolTable.find(str);
00706         if(i == this->symbolTable.end()) {
00707                 this->symbolTable[str] = new Type(startStatement->getPosition(),Type::PROCESS);
00708         } else {
00709                 v = startStatement->getIdentifier()->visit(*this);
00710                 if(v->type->getTypeCode() != Type::PROCESS) {
00711                         cerr << "Identificador tem que ser um processo \\_:D_/\n";
00712                         exit(1);
00713                 }
00714         }
00715         
00716         return v;
00717 }

VisitorReturn * TypeCheckerVisitor::visitStatement Statement statement  )  [virtual]
 

Implements Visitor.

Definition at line 719 of file typecheckervisitor.cpp.

00719                                                                       {
00720         VisitorReturn *v= new VisitorReturn;
00721         return v;
00722 }

VisitorReturn * TypeCheckerVisitor::visitStopStatement StopStatement stopStatement  )  [virtual]
 

Implements Visitor.

Definition at line 724 of file typecheckervisitor.cpp.

00724                                                                                   {
00725         VisitorReturn *v= new VisitorReturn;
00726         return v;
00727 }

VisitorReturn * TypeCheckerVisitor::visitStringLiteral StringLiteral stringLiteral  )  [virtual]
 

Implements Visitor.

Definition at line 729 of file typecheckervisitor.cpp.

References Ast::getPosition(), Type::STRING, and VisitorReturn::type.

00729                                                                                   {
00730         VisitorReturn *v= new VisitorReturn;
00731         v->type = new Type(stringLiteral->getPosition(),Type::STRING);
00732         return v;
00733 }

VisitorReturn * TypeCheckerVisitor::visitType Type type  )  [virtual]
 

Implements Visitor.

Definition at line 741 of file typecheckervisitor.cpp.

References VisitorReturn::type.

00741                                                        {
00742         VisitorReturn *v= new VisitorReturn;
00743         v->type = type;
00744         return v;
00745 }

VisitorReturn * TypeCheckerVisitor::visitUnaryExpression UnaryExpression unaryExpression  )  [virtual]
 

Implements Visitor.

Definition at line 747 of file typecheckervisitor.cpp.

References Type::BOOLEAN, UnaryExpression::getExpression(), UnaryExpression::getOp(), Type::getTypeCode(), Type::INTEGER, VisitorReturn::type, and Ast::visit().

00747                                                                                         {
00748         VisitorReturn *v= new VisitorReturn;
00749         string op;
00750 
00751         v = unaryExpression->getExpression()->visit(*this);
00752         op = unaryExpression->getOp();
00753         
00754         if(op == "~") {
00755                 if(v->type->getTypeCode() != Type::BOOLEAN) {
00756                         cerr << "Operadores booleanos aplicados a expressões não booleanas\n";
00757                         exit(1);
00758                 }
00759         } else {
00760                 if(v->type->getTypeCode() != Type::INTEGER) {
00761                         cerr << "Operadores aritmeticos aplicados a expressões não inteiras\n";
00762                         exit(1);
00763                 }
00764         }
00765         
00766                 
00767         return v; 
00768 }


Member Data Documentation

bool TypeCheckerVisitor::forgetIt [private]
 

Definition at line 15 of file typecheckervisitor.h.

Referenced by visitGuardTimeout(), and visitIdentifier().

bool TypeCheckerVisitor::insert [private]
 

Definition at line 14 of file typecheckervisitor.h.

Referenced by visitActStatement(), visitIdentifier(), visitSimpleBehavior(), visitSimpleDeclaration(), visitSimpleMessage(), and visitSimpleProcess().

vector<Ast*> TypeCheckerVisitor::stack [private]
 

Definition at line 16 of file typecheckervisitor.h.

Referenced by visitActStatement(), visitFieldType(), visitIdentifier(), visitSequentialExpressionList(), visitSequentialLeftSideList(), visitSimpleBehavior(), visitSimpleDeclaration(), visitSimpleFieldDeclaration(), visitSimpleMessage(), and visitSimpleProcess().

map<string, Type*> TypeCheckerVisitor::symbolTable [private]
 

Definition at line 13 of file typecheckervisitor.h.

Referenced by visitActStatement(), visitFieldReference(), visitFieldType(), visitIdentifier(), visitProgram(), visitSimpleFieldDeclaration(), visitSimpleProcess(), and visitStartStatement().


The documentation for this class was generated from the following files:
Generated on Mon Dec 1 17:39:36 2003 for Protomake by doxygen1.3