@interface OCSParser
- (void)parseFile:(NSString *)file;
- (void)parseString:(NSString *)string;

- (NSArray *)interfaces;
- (NSArray *)implementations;

- (void)setParsesInterfaceOnly:(BOOL)flag;
- (BOOL)parsesInterfaceOnly;
@end


@interface OCSInterface
- (NSArray *)instanceVariables;
- (void)addInstanceVariable:(OCSVariable *)var;
- (void)removeInstanceVariableWithName:(NSString *)name;

- (NSString *)interfaceClassName;
- (void)setInterfaceClassName:(NSString *)newName;

- (NSString *)interfaceSuperClassName;

- (NSArray *)interfaceMethods;
- (void)removeInterfaceMethodSignature:(OCSMethodSignature *)signature;
- (void)removeInterfaceMethodWithSelectorName:(NSString *)selName

- (NSArray *)adoptedProtocols;
- (void)setAdoptedProtocols:(NSArray *)array;

- (NSString *)categoryName;
- (void)setCategoryName;
- (BOOL)isCategory;

- (NSArray *)importedHeaders;
- (void)setImportedHeaders:(NSArray *)array;
- (NSArray *)requiredClasses;
- (void)setRequiredClasses:(NSArray *)array;
@end

@interface OCSImplementation
- (NSString *)interfaceClassName;
- (void)setInterfaceClassName:(NSString *)string;

- (NSString *)categoryName;
- (void)setCategoryName:(NSString *)aString;
- (NSArray *)methods;
- (void)removeMethod:(OCSMethod *)method;
- (void)removeMethodWithSelectorName:(NSString *)selName;
- (void)addMethod:(OCSMethod *)method;

- (void)renameMethodWithSelectorName:(NSString *)selName to:(NSString *)newName;

/* refactoring */
- (void)replaceVariableName:(NSString *)name with:(NSString *)newName;
- (void)replaceSelector:(NSString *)selector with:(NSString *)otherSelector;
@end

@interface OCSVariable
- variableName;
- setVariableName:(NSString *)name;
- setVariableType:(NSString *)type;
- variableType;
- isCType;
- isIn;
- isOut;
- isByCopy;
- isConstant;
- isReference;
- sourceString;

- (NSString *)source;
@end

@interface OCSMethodSignature
- selector;
- returnType;
- (NSArray *)arguments; /* array of OCS Variable */

- (NSString *)source;
@end

@interface OCSMethod
+ methodFromSource:(NSString *)aSource; /* create single method */
- signature;
- (NSString *)methodSource;
- (void)renameArgument:(NSString *)oldName to:(NSString *)newName

- (NSArray *)externalReferences; /* list of unknown symbols */
- (void)renameExternalReference:(NSString *)oldName to:(NSString *)newName;

- (NSString *)source;
@end
