Main Page   Modules   Data Structures   File List   Data Fields   Globals   Related Pages  

build/expression.c File Reference

Simple logical expression parser. More...

#include "system.h"
#include <rpmbuild.h>
#include <rpmlib.h>
#include "debug.h"

Go to the source code of this file.

Data Structures

struct  _parseState
 Parser state. More...

struct  _value
 Encapsulation of a "value". More...


Parser tokens

#define TOK_EOF   1
#define TOK_INTEGER   2
#define TOK_STRING   3
#define TOK_IDENTIFIER   4
#define TOK_ADD   5
#define TOK_MINUS   6
#define TOK_MULTIPLY   7
#define TOK_DIVIDE   8
#define TOK_OPEN_P   9
#define TOK_CLOSE_P   10
#define TOK_EQ   11
#define TOK_NEQ   12
#define TOK_LT   13
#define TOK_LE   14
#define TOK_GT   15
#define TOK_GE   16
#define TOK_NOT   17
#define TOK_LOGICAL_AND   18
#define TOK_LOGICAL_OR   19

Defines

#define DEBUG(x)
#define valueIsInteger(v)   ((v)->type == VALUE_TYPE_INTEGER)
#define valueIsString(v)   ((v)->type == VALUE_TYPE_STRING)
#define valueSameType(v1, v2)   ((v1)->type == (v2)->type)
#define EXPRBUFSIZ   BUFSIZ

Typedefs

typedef _valueValue
 Encapsulation of a "value".

typedef _parseStateParseState
 Parser state.


Functions

Value valueMakeInteger (int i)
Value valueMakeString (const char *s)
void valueFree (Value v)
int rdToken (ParseState state)
Value doLogical (ParseState state)
Value doPrimary (ParseState state)
Value doMultiplyDivide (ParseState state)
Value doAddSubtract (ParseState state)
Value doRelational (ParseState state)
int parseExpressionBoolean (Spec spec, const char *expr)
char * parseExpressionString (Spec spec, const char *expr)


Detailed Description

Simple logical expression parser.

This module implements a basic expression parser with support for integer and string datatypes. For ease of programming, we use the top-down "recursive descent" method of parsing. While a table-driven bottom-up parser might be faster, it does not really matter for the expressions we will be parsing.

Copyright (C) 1998 Tom Dyas <tdyas@eden.rutgers.edu> This work is provided under the GPL or LGPL at your choice.

Definition in file expression.c.


Define Documentation

#define DEBUG  
 

Definition at line 27 of file expression.c.

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), parseExpressionBoolean(), parseExpressionString(), and rdToken().

#define EXPRBUFSIZ   BUFSIZ
 

Definition at line 137 of file expression.c.

Referenced by rdToken().

#define TOK_ADD   5
 

Definition at line 120 of file expression.c.

Referenced by doAddSubtract(), and rdToken().

#define TOK_CLOSE_P   10
 

Definition at line 125 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_DIVIDE   8
 

Definition at line 123 of file expression.c.

Referenced by doMultiplyDivide(), and rdToken().

#define TOK_EOF   1
 

Definition at line 116 of file expression.c.

Referenced by parseExpressionBoolean(), parseExpressionString(), and rdToken().

#define TOK_EQ   11
 

Definition at line 126 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_GE   16
 

Definition at line 131 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_GT   15
 

Definition at line 130 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_IDENTIFIER   4
 

Definition at line 119 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_INTEGER   2
 

Definition at line 117 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_LE   14
 

Definition at line 129 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_LOGICAL_AND   18
 

Definition at line 133 of file expression.c.

Referenced by doLogical(), and rdToken().

#define TOK_LOGICAL_OR   19
 

Definition at line 134 of file expression.c.

Referenced by doLogical(), and rdToken().

#define TOK_LT   13
 

Definition at line 128 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_MINUS   6
 

Definition at line 121 of file expression.c.

Referenced by doAddSubtract(), doPrimary(), and rdToken().

#define TOK_MULTIPLY   7
 

Definition at line 122 of file expression.c.

Referenced by doMultiplyDivide(), and rdToken().

#define TOK_NEQ   12
 

Definition at line 127 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_NOT   17
 

Definition at line 132 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_OPEN_P   9
 

Definition at line 124 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_STRING   3
 

Definition at line 118 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define valueIsInteger      ((v)->type == VALUE_TYPE_INTEGER)
 

Definition at line 95 of file expression.c.

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), and doRelational().

#define valueIsString      ((v)->type == VALUE_TYPE_STRING)
 

Definition at line 96 of file expression.c.

#define valueSameType v1,
v2       ((v1)->type == (v2)->type)
 

Definition at line 97 of file expression.c.

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), and doRelational().


Typedef Documentation

typedef struct _parseState * ParseState
 

Parser state.

typedef struct _value * Value
 

Encapsulation of a "value".


Function Documentation

Value doAddSubtract ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 467 of file expression.c.

References _, _value::data, DEBUG, doMultiplyDivide(), _parseState::nextToken, rdToken(), RPMERR_BADSPEC, rpmError, stpcpy(), TOK_ADD, TOK_MINUS, valueFree(), valueIsInteger, valueMakeInteger(), valueMakeString(), valueSameType, and xmalloc().

Referenced by doRelational().

Value doLogical ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 627 of file expression.c.

References _, _value::data, DEBUG, doRelational(), _parseState::nextToken, rdToken(), RPMERR_BADSPEC, rpmError, TOK_LOGICAL_AND, TOK_LOGICAL_OR, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.

Referenced by doPrimary(), parseExpressionBoolean(), and parseExpressionString().

Value doMultiplyDivide ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 412 of file expression.c.

References _, _value::data, DEBUG, doPrimary(), _parseState::nextToken, rdToken(), RPMERR_BADSPEC, rpmError, TOK_DIVIDE, TOK_MULTIPLY, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.

Referenced by doAddSubtract().

Value doPrimary ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 331 of file expression.c.

References _, _value::data, DEBUG, doLogical(), _parseState::nextToken, rdToken(), RPMERR_BADSPEC, rpmError, rpmExpand(), TOK_CLOSE_P, TOK_IDENTIFIER, TOK_INTEGER, TOK_MINUS, TOK_NOT, TOK_OPEN_P, TOK_STRING, _parseState::tokenValue, valueIsInteger, valueMakeInteger(), and valueMakeString().

Referenced by doMultiplyDivide().

Value doRelational ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 531 of file expression.c.

References _, _value::data, DEBUG, doAddSubtract(), _parseState::nextToken, rdToken(), RPMERR_BADSPEC, rpmError, TOK_EQ, TOK_GE, TOK_GT, TOK_LE, TOK_LT, TOK_NEQ, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.

Referenced by doLogical().

int rdToken ParseState    state [static]
 

Parameters:
state  expression parser state

Definition at line 185 of file expression.c.

References _, DEBUG, EXPRBUFSIZ, _parseState::nextToken, _parseState::p, RPMERR_BADSPEC, rpmError, rpmExpand(), TOK_ADD, TOK_CLOSE_P, TOK_DIVIDE, TOK_EOF, TOK_EQ, TOK_GE, TOK_GT, TOK_IDENTIFIER, TOK_INTEGER, TOK_LE, TOK_LOGICAL_AND, TOK_LOGICAL_OR, TOK_LT, TOK_MINUS, TOK_MULTIPLY, TOK_NEQ, TOK_NOT, TOK_OPEN_P, TOK_STRING, _parseState::tokenValue, valueMakeInteger(), valueMakeString(), xisalnum(), xisalpha(), xisdigit(), xisspace(), and xstrdup().

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), parseExpressionBoolean(), and parseExpressionString().

void valueFree Value    v [static]
 

Definition at line 69 of file expression.c.

References _free(), _value::data, and _value::type.

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doRelational(), parseExpressionBoolean(), and parseExpressionString().

Value valueMakeInteger int    i [static]
 

Definition at line 43 of file expression.c.

References _value::data, _value::type, and xmalloc().

Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), and rdToken().

Value valueMakeString const char *    s [static]
 

Definition at line 56 of file expression.c.

References _value::data, _value::type, and xmalloc().

Referenced by doAddSubtract(), doPrimary(), and rdToken().


Generated on Sun Oct 26 13:02:04 2003 for rpm by doxygen1.2.18