Exemple #1
0
	private void relExp( TreeNode ptr ) {
		TreeNode p ; 
		TreeNode tar = new TreeNode() ;
		
		typeIR tIR = new typeIR() ;
		integer ntype = new integer( 0 ) ; 
		
		tar.IsTerminal=true ; tar.NonTerminal = nonTerminals.Exp  ;
		p = Search( ptr , tar , 1 ) ;
		if( p != null ) {
			Exp( p , tIR , ntype ) ;
			if( tIR.Equals( CharTy ) ) tIR.copy( IntTy ) ;
			p = Search( ptr.childs[1] , tar , 2 ) ;
			ntype.value = 1 ;
			Exp( p , tIR , ntype ) ;
		}
	}
Exemple #2
0
	private void term( TreeNode ptr , typeIR tIR , integer ntype) {
		TreeNode p , q ;
		TreeNode tar = new TreeNode() ;
		tar.IsTerminal=true ; tar.NonTerminal = nonTerminals.Factor  ;
		
		p = Search( ptr , tar , 1 ) ;
		if( p != null ) {
			tar.NonTerminal = nonTerminals.Exp  ;
			q = Search( p , tar , 0 ) ;
			if( q !=null ) Exp( q , tIR , ntype) ;
			else {
				tar.NonTerminal = nonTerminals.Variable  ;
				q = Search( p , tar , 1 ) ;
				if( q != null ){
					variable( q , tIR , ntype ) ;
				}
				else if( tIR != null && p.ChildNum != 0 && ( q = p.childs[0] ).Terminal.Equals( LexType.INTC)) {
					if( !tIR.Equals( IntTy ) && ntype.value != 2 ){
						error( "语义错误:		类型应该为" + tIR.Kind + ",而不应该是整型" , q.Line , q.Row ) ;
					}
				}
			}
			tar.NonTerminal = nonTerminals.OtherFactor ;
			q = Search( ptr , tar , 0 ) ;
			if( q != null ) {
				tar.NonTerminal = nonTerminals.Term  ;
				q = Search( q , tar , 0 ) ;
				if( q != null ) term( q , tIR , ntype ) ;
			}
		}
	}
Exemple #3
0
	private void assignmentRest( TreeNode ptr , SymTableNode sym ) {
		TreeNode p ; 
		TreeNode tar = new TreeNode() ;
		typeIR tIR = new typeIR() ;
		tIR.copy( sym.attrIR.idtype ) ; 
		integer ntype = new integer( 1 ) ; 
		
		tar.IsTerminal=true ; tar.NonTerminal = nonTerminals.VariMore  ;
		p = Search( ptr , tar , 0 ) ;
		if( p != null ) variMore( p , sym , tIR ) ;
		if( tIR.Equals( CharTy ) ) tIR.copy( IntTy ) ;
		tar.NonTerminal = nonTerminals.Exp  ;
		p = Search( ptr , tar , 0 ) ;
		if( p != null ) {
			Exp( p , tIR , ntype ) ;
		}
	}