|
rpm 5.3.7
|
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... | |
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 struct _value * | Value |
| Encapsulation of a "value". | |
| typedef struct _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. | |
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 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 Value doAddSubtract | ( | ParseState | 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 Value doLogical | ( | ParseState | state | ) | [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 Value doMultiplyDivide | ( | ParseState | state | ) | [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 Value doPrimary | ( | ParseState | state | ) | [static] |
| state | expression parser state |
Definition at line 337 of file expression.c.
References _, _value::data, DEBUG, doLogical(), _value::i, name, _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 Value doRelational | ( | ParseState | state | ) | [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 int rdToken | ( | ParseState | state | ) | [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 void valueFree | ( | Value | v | ) | [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 Value valueMakeInteger | ( | int | i | ) | [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 Value valueMakeString | ( | const char * | s | ) | [static] |
Definition at line 59 of file expression.c.
References _value::data, _value::s, _value::type, and xmalloc().
Referenced by doAddSubtract(), doPrimary(), and rdToken().
1.7.3