//
//  EXPMachineGenerator.h
//  dde
//
//  Created by ashley on 17/05/2008.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>

@class EXPBlockElement;
@class EXPModel;
@class EXPVirtualMachine;
@class EXPError;
@class EXPExpression;
@class EXPAssignmentOp;
@class EXPSymbolReference;

@interface EXPMachineGenerator : NSObject {
	NSDictionary *_opcodeList;
	BOOL _echo;
}

- (void) setEcho:(BOOL)echo;
- (BOOL) echo;

- (BOOL) compileIndexOffset:(EXPSymbolReference *)reference machine:(EXPVirtualMachine *)machine baseAddress:(int)baseAddress address:(int *)variableAddress 
	error:(EXPError *)err;
- (BOOL) compileExpression:(EXPExpression *)exp machine:(EXPVirtualMachine *)machine error:(EXPError *)error opcode:(int)opcode;
- (BOOL) compileExpression:(EXPExpression *)exp machine:(EXPVirtualMachine *)machine error:(EXPError *)error;
- (BOOL) compilePush:(EXPExpression *)exp machine:(EXPVirtualMachine *)machine error:(EXPError *)error;
- (BOOL) compileAssignmentOp:(EXPAssignmentOp *)assignment machine:(EXPVirtualMachine *)machine error:(EXPError *)error;
- (BOOL) compileStatement:(id)statement machine:(EXPVirtualMachine *)machine error:(EXPError *)error;
- (void) setOpcodeList:(id)opcodeList;
- (id) opcodeList;
- (BOOL) generate:(EXPBlockElement *)block machine:(EXPModel *)machine error:(EXPError *)error;

@end