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  _value
 Encapsulation of a "value". More...
struct  _parseState
 Parser state. More...

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
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

Typedefs

typedef _valueValue
 Encapsulation of a "value".
typedef _parseStateParseState
 Parser state.

Functions

static Value valueMakeInteger (int i)
static Value valueMakeString (const char *s)
static void valueFree (Value v)
static int rdToken (ParseState state)
 
Parameters:
state expression parser state

static Value doLogical (ParseState state)
 
Parameters:
state expression parser state

static Value doPrimary (ParseState state)
 
Parameters:
state expression parser state

static Value doMultiplyDivide (ParseState state)
 
Parameters:
state expression parser state

static Value doAddSubtract (ParseState state)
 
Parameters:
state expression parser state

static Value doRelational (ParseState state)
 
Parameters:
state expression parser state

int parseExpressionBoolean (Spec spec, const char *expr)
 Evaluate boolean expression.
char * parseExpressionString (Spec spec, const char *expr)
 Evaluate string expression.


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 140 of file expression.c.

Referenced by rdToken().

#define TOK_ADD   5

Definition at line 123 of file expression.c.

Referenced by doAddSubtract(), and rdToken().

#define TOK_CLOSE_P   10

Definition at line 128 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_DIVIDE   8

Definition at line 126 of file expression.c.

Referenced by doMultiplyDivide(), and rdToken().

#define TOK_EOF   1

Definition at line 119 of file expression.c.

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

#define TOK_EQ   11

Definition at line 129 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_GE   16

Definition at line 134 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_GT   15

Definition at line 133 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_IDENTIFIER   4

Definition at line 122 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_INTEGER   2

Definition at line 120 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_LE   14

Definition at line 132 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_LOGICAL_AND   18

Definition at line 136 of file expression.c.

Referenced by doLogical(), and rdToken().

#define TOK_LOGICAL_OR   19

Definition at line 137 of file expression.c.

Referenced by doLogical(), and rdToken().

#define TOK_LT   13

Definition at line 131 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_MINUS   6

Definition at line 124 of file expression.c.

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

#define TOK_MULTIPLY   7

Definition at line 125 of file expression.c.

Referenced by doMultiplyDivide(), and rdToken().

#define TOK_NEQ   12

Definition at line 130 of file expression.c.

Referenced by doRelational(), and rdToken().

#define TOK_NOT   17

Definition at line 135 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_OPEN_P   9

Definition at line 127 of file expression.c.

Referenced by doPrimary(), and rdToken().

#define TOK_STRING   3

Definition at line 121 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

static Value doAddSubtract ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 476 of file expression.c.

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

Referenced by doRelational().

static Value doLogical ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 637 of file expression.c.

References _, 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().

static Value doMultiplyDivide ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 420 of file expression.c.

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

Referenced by doAddSubtract().

static Value doPrimary ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 336 of file expression.c.

References _, 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().

static Value doRelational ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 541 of file expression.c.

References _, 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().

static int rdToken ( ParseState  state  )  [static]

Parameters:
state expression parser state

Definition at line 188 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().

static void valueFree ( Value  v  )  [static]

Definition at line 69 of file expression.c.

References _free().

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

static Value valueMakeInteger ( int  i  )  [static]

Definition at line 43 of file expression.c.

References xmalloc().

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

static Value valueMakeString ( const char *  s  )  [static]

Definition at line 56 of file expression.c.

References xmalloc().

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


Generated on Fri Oct 12 08:44:55 2007 for rpm by  doxygen 1.5.2