#include "parser.h" void ExprSeqNode::semant( Scope *s ){ for( int k=0;ksemant( s ); type=Type::int_type; } void SimpleVarNode::semant( Scope *s ){ if( type=s->findIdent( ident ) ) return; s->insertIdent( ident,Type::int_type ); } void LabelNode::semant( Scope *s ){ Type *t=s->findIdent( label ); if( !t ){ s->insertIdent( label,new LabelType( this ) ); return; } if( t->labelType() && !t->labelType()->defn ){ t->labelType()->defn=this; return; } semantEx( "Duplicate identifier" ); } void GotoNode::semant( Scope *s ){ Type *t=s->findIdent( label ); if( !t ){ s->insertIdent( label,new LabelType(0) ); return; } if( t->labelType() ) return; semantEx( "Duplicate Identifier" ); } void ProgNode::semant( Scope *s ){ StmtSeqNode::semant( s ); map::iterator it; for( it=s->idents.begin();it!=s->idents.end();++it ){ if( LabelType *l=it->second->labelType() ){ if( !l->defn ){ semantEx( "Undefined Label" ); } } } }