Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

271 lines
9.9 KiB

//
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
#ifndef SIMC_PARSE_TREE_H
#define SIMC_PARSE_TREE_H
typedef CList<int, int> SIMCCleanOidValue;
ostream& operator << (ostream& outStream, const SIMCCleanOidValue& obj);
/*
* SIMCParseTree - This is derived from the SIMCAbstractParseTree class
* and provides implementation of all the pure virtual functions in it (the
* semantic checking functions).
* It uses the dll "smierrsy.dll" to hold the strings for the error messages
* that it generates while checking semantics.
* It uses the error container of the base class to place these messages.
*/
class SIMCParseTree : public SIMCAbstractParseTree
{
// An OID tree that spans all modules.
// Constructed as an aid to semantic checking
SIMCOidTree _theTree;
// The lowest semantic error Id
static const int SEMANTIC_ERROR_BASE;
// The size of the buffer used to construct an error message
static const int MESSAGE_SIZE;
public:
// The resource-only dll with semantic error text string table
static HINSTANCE semanticErrorsDll;
// Accept an error container to put the error messages in.
SIMCParseTree(SIMCErrorContainer * ec)
: SIMCAbstractParseTree(ec)
{
if ( semanticErrorsDll == NULL )
semanticErrorsDll = LoadLibrary(SIMCParser::semanticErrorsDllFile);
}
// Severity levels for the various erro messages generated
// by this class
enum SeverityLevel
{
INVALID,
FATAL,
WARNING,
INFORMATION
};
// A function for constructing the error messages, to be put into
// the error container
void SemanticError(const char *const inputStreamName, int errorType,
int lineNo,
int columnNo,
...);
// Resolve the forward references and the external references.
// See the description in SIMCAbstractParseTree
virtual BOOL Resolve(BOOL local);
// Privately used functions, in Resolve()
private:
BOOL SetResolutionStatus();
BOOL SetRootAll();
BOOL SetDefVal();
BOOL ResolveModule(SIMCModule *m, BOOL local);
BOOL ResolveImportModule(SIMCModule *m, BOOL local);
BOOL ResolveSymbol(SIMCSymbol **symbol, BOOL local);
public:
// Check the Semantics of the modules
// See the description in SIMCAbstractParseTree
virtual BOOL CheckSemantics(BOOL local = FALSE);
// A user will rarely use this function. It gets him the
// OID tree that spans all the modules fed into the
// SIMCParseTree, till now.
const SIMCOidTree *GetOidTree() const
{
return &_theTree;
}
// A user will rarely use this function. It converts an unclean
// OID value (SIMCOidValue) (ie, one that has references to symbols)
// to a clean OID value (SIMCCleanOidValue) (ie, one in which all the
// components are integer values)
SIMCResolutionStatus GetCleanOidValue( const char *const filename,
SIMCOidValue * input,
SIMCCleanOidValue& result,
BOOL local);
// Privately used functions, in CheckSemantics()
// These functions check the various MIB constructs.
private:
// Steps thru the symbol table and calls CheckSymbol() on each function
BOOL CheckModule(SIMCModule *, BOOL);
// Uses RTTI to check the type of the symbol and calls
// CheckBuiltInTypeRef() or CheckDefinedTypeRef() or
// CheckBuiltInValueRef() or CheckDefinedValueRef() or
// CheckTextualConvention().
BOOL CheckSymbol(SIMCSymbol **, BOOL);
// Check type references
BOOL CheckBuiltInTypeRef(SIMCBuiltInTypeReference *symbol, BOOL);
BOOL CheckDefinedTypeRef(SIMCDefinedTypeReference *symbol, BOOL);
BOOL CheckTextualConvention(SIMCTextualConvention *symbol, BOOL local);
// Check types
BOOL CheckRangeTypeV0(const char *const fileName,
SIMCRangeType *rangeType, BOOL);
BOOL CheckRangeTypeV1(const char *const fileName,
SIMCRangeType *rangeType, BOOL);
BOOL CheckRangeTypeV2(const char *const fileName,
SIMCRangeType *rangeType, BOOL);
BOOL CheckRangeRange(const SIMCRangeList *baseList);
BOOL CheckSizeTypeV1(const char *const fileName,
SIMCSizeType *sizeType, BOOL);
BOOL CheckSizeTypeV0(const char *const fileName,
SIMCSizeType *sizeType, BOOL);
BOOL CheckSizeTypeV2(const char *const fileName,
SIMCSizeType *sizeType, BOOL);
BOOL CheckEnumTypeV0(const char *const fileName,
SIMCEnumOrBitsType *enumType, BOOL);
BOOL CheckEnumTypeV1(const char *const fileName,
SIMCEnumOrBitsType *enumType, BOOL);
BOOL CheckEnumTypeV2(const char *const fileName,
SIMCEnumOrBitsType *enumType, BOOL);
BOOL CheckBitsTypeV2(const char *const fileName,
SIMCEnumOrBitsType *bitsType, BOOL local);
BOOL CheckSequenceOfType(const char *const fileName,
SIMCSequenceOfType *sequenceOfType, BOOL);
BOOL CheckSequenceType(const char *const fileName,
SIMCSequenceType *sequenceType, BOOL);
BOOL CheckTrapType(const char *const fileName,
SIMCTrapTypeType *trapType, BOOL);
BOOL CheckNotificationType(const char *const fileName,
SIMCNotificationTypeType *notificationType, BOOL);
BOOL CheckObjectIdentityType(const char *const fileName,
SIMCObjectIdentityType *rhs, BOOL local);
BOOL CheckObjectTypeV1(const char *const fileName,
SIMCObjectTypeV1 *objectType, BOOL);
BOOL CheckObjectTypeV2(const char *const fileName,
SIMCObjectTypeV2 *objectType, BOOL);
BOOL CheckObjectTypeV1Syntax(const char *const fileName,
SIMCObjectTypeV1 *objectType, BOOL local);
BOOL CheckObjectTypeV2Syntax(const char *const fileName,
SIMCObjectTypeV2 *objectType, BOOL local);
BOOL CheckObjectTypeV1Index(const char *const fileName,
SIMCSymbol *objectTypeSymbol,
SIMCObjectTypeV1 *objectType, BOOL local);
BOOL CheckObjectTypeV2Index(const char *const fileName,
SIMCSymbol *objectTypeSymbol,
SIMCObjectTypeV2 *objectType, BOOL local);
BOOL CheckObjectTypeDefVal(const char *const fileName,
SIMCObjectTypeType *objectType, BOOL local);
// Check value references
BOOL CheckBuiltInValueRef(SIMCBuiltInValueReference *symbol, BOOL);
BOOL CheckDefinedValueRef(SIMCDefinedValueReference *symbol, BOOL);
BOOL CheckObjectTypeValueAssignmentV1(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCObjectTypeV1 *objectType,
SIMCValue *value,
BOOL local);
BOOL CheckObjectTypeValueAssignmentV2(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCObjectTypeV2 *objectType,
SIMCValue *value,
BOOL local);
BOOL CheckTrapTypeValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCTrapTypeType *trapType,
SIMCValue *value,
BOOL local);
BOOL CheckNotificationTypeValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCNotificationTypeType *notificationType,
SIMCValue *value,
BOOL local);
BOOL CheckObjectIdentityValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCObjectIdentityType *type,
SIMCValue *value,
BOOL local);
BOOL CheckEnumValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCEnumOrBitsType *enumType,
SIMCValue *value,
BOOL local);
BOOL CheckSubTypeValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCSubType *subType,
SIMCValue *value,
BOOL local);
BOOL CheckPrimitiveValueAssignment(const char * const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCTypeReference *btRef,
SIMCValue *value,
BOOL local);
BOOL CheckBitsTypeValueAssignment(const char *const fileName,
SIMCBuiltInValueReference *bvRef,
SIMCBuiltInTypeReference *btRef,
SIMCEnumOrBitsType *bitsType,
SIMCValue *value,
BOOL local);
BOOL MatchSequenceObjectTypeSyntax(const char *const fileName,
SIMCObjectTypeType *objectType,
SIMCTypeReference *typeRef,
SIMCSequenceItem *item,
BOOL local);
BOOL CheckObjectSequenceItem( const char *const fileName,
SIMCSequenceItem * item,
SIMCValueReference *parentObjectType,
BOOL local);
BOOL CheckObjectSequenceOfTypeV1(const char *const fileName,
SIMCObjectTypeV1 *objType,
SIMCSequenceOfType *sequenceOfType,
BOOL local);
BOOL CheckObjectSequenceOfTypeV2(const char *const fileName,
SIMCObjectTypeV2 *objType,
SIMCSequenceOfType *sequenceOfType,
BOOL local);
BOOL CheckObjectSequenceTypeV1(const char *const fileName,
SIMCObjectTypeV1 *objType,
SIMCSequenceType *sequenceType,
BOOL local);
BOOL CheckObjectSequenceTypeV2(const char *const fileName,
SIMCObjectTypeV2 *objType,
SIMCSequenceType *sequenceType,
BOOL local);
// Build the OID tree for all the modules.
// Calls BuildModuleOidTree() on each module
BOOL BuildOidTree(BOOL local);
// Builds OID tree for a module
BOOL BuildModuleOidTree(SIMCModule *m, BOOL);
// Makes Semantic checks on the OID tree.
BOOL CheckOidTree(BOOL local);
// Converts TRAP-TYPEs, if any to NOTIFICATION-TYPES
// Then fabricates NOTIFICATION-GROUPs from NOTIFICATION-TYPEs
BOOL FabricateNotificationGroups();
// The recursive routine called by GetCleanOidValue()
SIMCResolutionStatus GetCleanOidValueRec( const char *const fileName,
SIMCOidValue * input,
SIMCCleanOidValue& result,
BOOL local,
SIMCSymbolList& checkedList);
};
#endif