summaryrefslogtreecommitdiff
path: root/src/mod_ssi_exprparser.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_ssi_exprparser.y')
-rw-r--r--src/mod_ssi_exprparser.y122
1 files changed, 0 insertions, 122 deletions
diff --git a/src/mod_ssi_exprparser.y b/src/mod_ssi_exprparser.y
deleted file mode 100644
index ffaafd05..00000000
--- a/src/mod_ssi_exprparser.y
+++ /dev/null
@@ -1,122 +0,0 @@
-%token_prefix TK_
-%token_type {buffer *}
-%extra_argument {ssi_ctx_t *ctx}
-%name ssiexprparser
-
-%include {
-#include <assert.h>
-#include <string.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "mod_ssi_expr.h"
-#include "buffer.h"
-}
-
-%parse_failure {
- ctx->ok = 0;
-}
-
-%type expr { ssi_val_t * }
-%type value { buffer * }
-%type exprline { ssi_val_t * }
-%type cond { int }
-%token_destructor { buffer_free($$); }
-
-%left AND.
-%left OR.
-%nonassoc EQ NE GT GE LT LE.
-%right NOT.
-
-input ::= exprline(B). {
- ctx->val.bo = ssi_val_tobool(B);
- ctx->val.type = SSI_TYPE_BOOL;
-
- ssi_val_free(B);
-}
-
-exprline(A) ::= expr(B) cond(C) expr(D). {
- int cmp;
-
- if (B->type == SSI_TYPE_STRING &&
- D->type == SSI_TYPE_STRING) {
- cmp = strcmp(B->str->ptr, D->str->ptr);
- } else {
- cmp = ssi_val_tobool(B) - ssi_val_tobool(D);
- }
-
- A = B;
-
- switch(C) {
- case SSI_COND_EQ: A->bo = (cmp == 0) ? 1 : 0; break;
- case SSI_COND_NE: A->bo = (cmp != 0) ? 1 : 0; break;
- case SSI_COND_GE: A->bo = (cmp >= 0) ? 1 : 0; break;
- case SSI_COND_GT: A->bo = (cmp > 0) ? 1 : 0; break;
- case SSI_COND_LE: A->bo = (cmp <= 0) ? 1 : 0; break;
- case SSI_COND_LT: A->bo = (cmp < 0) ? 1 : 0; break;
- }
-
- A->type = SSI_TYPE_BOOL;
-
- ssi_val_free(D);
-}
-exprline(A) ::= expr(B). {
- A = B;
-}
-expr(A) ::= expr(B) AND expr(C). {
- int e;
-
- e = ssi_val_tobool(B) && ssi_val_tobool(C);
-
- A = B;
- A->bo = e;
- A->type = SSI_TYPE_BOOL;
- ssi_val_free(C);
-}
-
-expr(A) ::= expr(B) OR expr(C). {
- int e;
-
- e = ssi_val_tobool(B) || ssi_val_tobool(C);
-
- A = B;
- A->bo = e;
- A->type = SSI_TYPE_BOOL;
- ssi_val_free(C);
-}
-
-expr(A) ::= NOT expr(B). {
- int e;
-
- e = !ssi_val_tobool(B);
-
- A = B;
- A->bo = e;
- A->type = SSI_TYPE_BOOL;
-}
-expr(A) ::= LPARAN exprline(B) RPARAN. {
- A = B;
-}
-
-expr(A) ::= value(B). {
- A = ssi_val_init();
- A->str = B;
- A->type = SSI_TYPE_STRING;
-}
-
-value(A) ::= VALUE(B). {
- A = B;
-}
-
-value(A) ::= value(B) VALUE(C). {
- A = B;
- buffer_append_string_buffer(A, C);
- buffer_free(C);
-}
-
-cond(A) ::= EQ. { A = SSI_COND_EQ; }
-cond(A) ::= NE. { A = SSI_COND_NE; }
-cond(A) ::= LE. { A = SSI_COND_LE; }
-cond(A) ::= GE. { A = SSI_COND_GE; }
-cond(A) ::= LT. { A = SSI_COND_LT; }
-cond(A) ::= GT. { A = SSI_COND_GT; }