29#define PARSE_EQN_SYM_OPEN '('
30#define PARSE_EQN_SYM_CLOSE ')'
31#define PARSE_EQN_SYM_CONST0 '0'
32#define PARSE_EQN_SYM_CONST1 '1'
33#define PARSE_EQN_SYM_NEG '!'
34#define PARSE_EQN_SYM_AND '*'
35#define PARSE_EQN_SYM_XOR '^'
36#define PARSE_EQN_SYM_OR '+'
39#define PARSE_EQN_OPER_NEG 10
40#define PARSE_EQN_OPER_AND 9
41#define PARSE_EQN_OPER_XOR 8
42#define PARSE_EQN_OPER_OR 7
43#define PARSE_EQN_OPER_MARK 1
46#define PARSE_EQN_FLAG_START 1
47#define PARSE_EQN_FLAG_VAR 2
48#define PARSE_EQN_FLAG_OPER 3
49#define PARSE_EQN_FLAG_ERROR 4
51#define PARSE_EQN_STACKSIZE 1000
77 char * pTemp, * pName;
78 int nParans, fFound, Flag;
79 int Oper, Oper1, Oper2;
84 for ( pTemp = pFormInit; *pTemp; pTemp++ )
87 else if ( *pTemp ==
')' )
91 fprintf( pOutput,
"Parse_FormulaParserEqn(): Different number of opening and closing parentheses ().\n" );
97 sprintf( pFormula,
"(%s)", pFormInit );
104 for ( pTemp = pFormula; *pTemp; pTemp++ )
118 fprintf( pOutput,
"Parse_FormulaParserEqn(): No operation symbol before constant 0.\n" );
128 fprintf( pOutput,
"Parse_FormulaParserEqn(): No operation symbol before constant 1.\n" );
147 fprintf( pOutput,
"Parse_FormulaParserEqn(): There is no variable before AND, EXOR, or OR.\n" );
163 fprintf( pOutput,
"Parse_FormulaParserEqn(): An opening parenthesis follows a var without operation sign.\n" );
178 fprintf( pOutput,
"Parse_FormulaParserEqn(): There is no opening parenthesis\n" );
187 if ( Parse_ParserPerformTopOp( pMan, pStackFn, Oper ) == NULL )
191 fprintf( pOutput,
"Parse_FormulaParserEqn(): Unknown operation\n" );
199 fprintf( pOutput,
"Parse_FormulaParserEqn(): There is no opening parenthesis\n" );
210 for ( i = 0; pTemp[i] &&
211 pTemp[i] !=
' ' && pTemp[i] !=
'\t' && pTemp[i] !=
'\r' && pTemp[i] !=
'\n' &&
216 fprintf( pOutput,
"Parse_FormulaParserEqn(): The negation sign or an opening parenthesis inside the variable name.\n" );
224 if (
strncmp(pTemp, pName, i) == 0 &&
strlen(pName) == (
unsigned)i )
232 fprintf( pOutput,
"Parse_FormulaParserEqn(): The parser cannot find var \"%s\" in the input var list.\n", pTemp );
238 fprintf( pOutput,
"Parse_FormulaParserEqn(): The variable name \"%s\" follows another var without operation sign.\n", pTemp );
278 if ( Oper2 >= Oper1 )
280 if ( Parse_ParserPerformTopOp( pMan, pStackFn, Oper2 ) == NULL )
282 fprintf( pOutput,
"Parse_FormulaParserEqn(): Unknown operation\n" );
314 fprintf( pOutput,
"Parse_FormulaParserEqn(): Something is left in the operation stack\n" );
316 fprintf( pOutput,
"Parse_FormulaParserEqn(): Something is left in the function stack\n" );
319 fprintf( pOutput,
"Parse_FormulaParserEqn(): The input string is empty\n" );
343 gFunc =
Hop_And( pMan, gArg1, gArg2 );
345 gFunc =
Hop_Or( pMan, gArg1, gArg2 );
347 gFunc =
Hop_Exor( pMan, gArg1, gArg2 );
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
Hop_Obj_t * Hop_IthVar(Hop_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Hop_Obj_t * Hop_Exor(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
Hop_Obj_t * Hop_And(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
Hop_Obj_t * Hop_Or(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
struct Hop_Obj_t_ Hop_Obj_t
#define PARSE_EQN_OPER_OR
#define PARSE_EQN_SYM_CONST0
#define PARSE_EQN_SYM_CONST1
#define PARSE_EQN_OPER_XOR
#define PARSE_EQN_SYM_OPEN
DECLARATIONS ///.
#define PARSE_EQN_FLAG_OPER
#define PARSE_EQN_FLAG_START
#define PARSE_EQN_FLAG_ERROR
#define PARSE_EQN_SYM_XOR
#define PARSE_EQN_SYM_AND
#define PARSE_EQN_STACKSIZE
#define PARSE_EQN_FLAG_VAR
#define PARSE_EQN_SYM_NEG
#define PARSE_EQN_SYM_CLOSE
#define PARSE_EQN_OPER_NEG
Hop_Obj_t * Parse_FormulaParserEqn(FILE *pOutput, char *pFormInit, Vec_Ptr_t *vVarNames, Hop_Man_t *pMan)
FUNCTION DEFINITIONS ///.
#define PARSE_EQN_OPER_AND
#define PARSE_EQN_OPER_MARK
struct ParseStackOpStruct Parse_StackOp_t
Parse_StackFn_t * Parse_StackFnStart(int nDepth)
GLOBAL VARIABLES ///.
void * Parse_StackFnPop(Parse_StackFn_t *p)
void Parse_StackFnFree(Parse_StackFn_t *p)
void Parse_StackFnPush(Parse_StackFn_t *p, void *bFunc)
Parse_StackOp_t * Parse_StackOpStart(int nDepth)
int Parse_StackOpIsEmpty(Parse_StackOp_t *p)
typedefABC_NAMESPACE_HEADER_START struct ParseStackFnStruct Parse_StackFn_t
INCLUDES ///.
void Parse_StackOpPush(Parse_StackOp_t *p, int Oper)
int Parse_StackFnIsEmpty(Parse_StackFn_t *p)
int Parse_StackOpPop(Parse_StackOp_t *p)
void Parse_StackOpFree(Parse_StackOp_t *p)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.