rpm
5.2.1
|
Simple logical expression parser. More...
#include "system.h"
#include <rpmio.h>
#include <rpmiotypes.h>
#include <rpmlog.h>
#include <rpmbuild.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... | |
Macros | |
#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 struct _value * | Value |
Encapsulation of a "value". More... | |
typedef struct _parseState * | ParseState |
Parser state. More... | |
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. More... | |
char * | parseExpressionString (Spec spec, const char *expr) |
Evaluate string expression. More... | |
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 This work is provided under the GPL or LGPL at your choice. @ede n.rut gers .edu
Definition in file expression.c.
#define DEBUG | ( | x | ) |
Definition at line 30 of file expression.c.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), parseExpressionBoolean(), parseExpressionString(), and rdToken().
#define EXPRBUFSIZ BUFSIZ |
Definition at line 143 of file expression.c.
Referenced by rdToken().
#define TOK_ADD 5 |
Definition at line 126 of file expression.c.
Referenced by doAddSubtract(), and rdToken().
#define TOK_CLOSE_P 10 |
Definition at line 131 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define TOK_DIVIDE 8 |
Definition at line 129 of file expression.c.
Referenced by doMultiplyDivide(), and rdToken().
#define TOK_EOF 1 |
Definition at line 122 of file expression.c.
Referenced by parseExpressionBoolean(), parseExpressionString(), and rdToken().
#define TOK_EQ 11 |
Definition at line 132 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_GE 16 |
Definition at line 137 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_GT 15 |
Definition at line 136 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_IDENTIFIER 4 |
Definition at line 125 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define TOK_INTEGER 2 |
Definition at line 123 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define TOK_LE 14 |
Definition at line 135 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_LOGICAL_AND 18 |
Definition at line 139 of file expression.c.
Referenced by doLogical(), and rdToken().
#define TOK_LOGICAL_OR 19 |
Definition at line 140 of file expression.c.
Referenced by doLogical(), and rdToken().
#define TOK_LT 13 |
Definition at line 134 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_MINUS 6 |
Definition at line 127 of file expression.c.
Referenced by doAddSubtract(), doPrimary(), and rdToken().
#define TOK_MULTIPLY 7 |
Definition at line 128 of file expression.c.
Referenced by doMultiplyDivide(), and rdToken().
#define TOK_NEQ 12 |
Definition at line 133 of file expression.c.
Referenced by doRelational(), and rdToken().
#define TOK_NOT 17 |
Definition at line 138 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define TOK_OPEN_P 9 |
Definition at line 130 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define TOK_STRING 3 |
Definition at line 124 of file expression.c.
Referenced by doPrimary(), and rdToken().
#define valueIsInteger | ( | v | ) | ((v)->type == VALUE_TYPE_INTEGER) |
Definition at line 98 of file expression.c.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), and doRelational().
#define valueIsString | ( | v | ) | ((v)->type == VALUE_TYPE_STRING) |
Definition at line 99 of file expression.c.
#define valueSameType | ( | v1, | |
v2 | |||
) | ((v1)->type == (v2)->type) |
Definition at line 100 of file expression.c.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), and doRelational().
typedef struct _parseState * ParseState |
Parser state.
|
static |
state | expression parser state |
Definition at line 473 of file expression.c.
References _, _value::data, DEBUG, doMultiplyDivide(), _value::i, _parseState::nextToken, rdToken(), rpmlog(), RPMLOG_ERR, _value::s, stpcpy(), TOK_ADD, TOK_MINUS, valueFree(), valueIsInteger, valueMakeInteger(), valueMakeString(), valueSameType, and xmalloc().
Referenced by doRelational().
|
static |
state | expression parser state |
Definition at line 629 of file expression.c.
References _, _value::data, DEBUG, doRelational(), _value::i, _parseState::nextToken, rdToken(), rpmlog(), RPMLOG_ERR, TOK_LOGICAL_AND, TOK_LOGICAL_OR, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.
Referenced by doPrimary(), parseExpressionBoolean(), and parseExpressionString().
|
static |
state | expression parser state |
Definition at line 419 of file expression.c.
References _, _value::data, DEBUG, doPrimary(), _value::i, _parseState::nextToken, rdToken(), rpmlog(), RPMLOG_ERR, TOK_DIVIDE, TOK_MULTIPLY, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.
Referenced by doAddSubtract().
|
static |
state | expression parser state |
Definition at line 337 of file expression.c.
References _, _value::data, DEBUG, doLogical(), _value::i, _parseState::nextToken, rdToken(), rpmExpand(), rpmlog(), RPMLOG_ERR, _value::s, 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 |
state | expression parser state |
Definition at line 535 of file expression.c.
References _, _value::data, DEBUG, doAddSubtract(), _value::i, _parseState::nextToken, rdToken(), rpmlog(), RPMLOG_ERR, _value::s, TOK_EQ, TOK_GE, TOK_GT, TOK_LE, TOK_LT, TOK_NEQ, valueFree(), valueIsInteger, valueMakeInteger(), and valueSameType.
Referenced by doLogical().
|
static |
state | expression parser state |
Definition at line 190 of file expression.c.
References _, DEBUG, EXPRBUFSIZ, _parseState::nextToken, _parseState::p, rpmExpand(), rpmlog(), RPMLOG_ERR, 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 |
Definition at line 72 of file expression.c.
References _free(), _value::data, _value::s, and _value::type.
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doRelational(), parseExpressionBoolean(), and parseExpressionString().
|
static |
Definition at line 46 of file expression.c.
References _value::data, _value::i, _value::type, and xmalloc().
Referenced by doAddSubtract(), doLogical(), doMultiplyDivide(), doPrimary(), doRelational(), and rdToken().
|
static |
Definition at line 59 of file expression.c.
References _value::data, _value::s, _value::type, and xmalloc().
Referenced by doAddSubtract(), doPrimary(), and rdToken().