#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 _value * | Value | |||
Encapsulation of a "value". | ||||
typedef _parseState * | ParseState | |||
Parser state. | ||||
Functions | ||||
static Value | valueMakeInteger (int i) | |||
static Value | valueMakeString (const char *s) | |||
static void | valueFree (Value v) | |||
static int | rdToken (ParseState state) | |||
| ||||
static Value | doLogical (ParseState state) | |||
| ||||
static Value | doPrimary (ParseState state) | |||
| ||||
static Value | doMultiplyDivide (ParseState state) | |||
| ||||
static Value | doAddSubtract (ParseState state) | |||
| ||||
static Value | doRelational (ParseState state) | |||
| ||||
int | parseExpressionBoolean (Spec spec, const char *expr) | |||
Evaluate boolean expression. | ||||
char * | parseExpressionString (Spec spec, const char *expr) | |||
Evaluate string expression. |
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 DEBUG | ( | x | ) |
Definition at line 27 of file expression.c.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), parseExpressionBoolean(), parseExpressionString(), and rdToken().
#define EXPRBUFSIZ BUFSIZ |
#define TOK_ADD 5 |
#define TOK_CLOSE_P 10 |
#define TOK_DIVIDE 8 |
#define TOK_EOF 1 |
Definition at line 119 of file expression.c.
Referenced by parseExpressionBoolean(), parseExpressionString(), and rdToken().
#define TOK_EQ 11 |
#define TOK_GE 16 |
#define TOK_GT 15 |
#define TOK_IDENTIFIER 4 |
#define TOK_INTEGER 2 |
#define TOK_LE 14 |
#define TOK_LOGICAL_AND 18 |
#define TOK_LOGICAL_OR 19 |
#define TOK_LT 13 |
#define TOK_MINUS 6 |
Definition at line 124 of file expression.c.
Referenced by doAddSubtract(), doPrimary(), and rdToken().
#define TOK_MULTIPLY 7 |
#define TOK_NEQ 12 |
#define TOK_NOT 17 |
#define TOK_OPEN_P 9 |
#define TOK_STRING 3 |
#define valueIsInteger | ( | v | ) | ((v)->type == VALUE_TYPE_INTEGER) |
Definition at line 95 of file expression.c.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), and doRelational().
#define valueIsString | ( | v | ) | ((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 struct _parseState * ParseState |
Parser state.
static Value doAddSubtract | ( | ParseState | state | ) | [static] |
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] |
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] |
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] |
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] |
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] |
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().