summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php')
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php61
1 files changed, 61 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php b/www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php
new file mode 100644
index 00000000..2f7d9c99
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Abuse filter parser.
+ * Copyright © Victor Vasiliev, 2008.
+ * Based on ideas by Andrew Garrett
+ * Distributed under GNU GPL v2 terms.
+ *
+ * Types of token:
+ * * T_NONE - special-purpose token
+ * * T_BRACE - ( or )
+ * * T_COMMA - ,
+ * * T_OP - operator like + or ^
+ * * T_NUMBER - number
+ * * T_STRING - string, in "" or ''
+ * * T_KEYWORD - keyword
+ * * T_ID - identifier
+ * * T_STATEMENT_SEPARATOR - ;
+ * * T_SQUARE_BRACKETS - [ or ]
+ *
+ * Levels of parsing:
+ * * Entry - catches unexpected characters
+ * * Semicolon - ;
+ * * Set - :=
+ * * Conditionls (IF) - if-then-else-end, cond ? a :b
+ * * BoolOps (BO) - &, |, ^
+ * * CompOps (CO) - ==, !=, ===, !==, >, <, >=, <=
+ * * SumRel (SR) - +, -
+ * * MulRel (MR) - *, /, %
+ * * Pow (P) - **
+ * * BoolNeg (BN) - ! operation
+ * * SpecialOperators (SO) - in and like
+ * * Unarys (U) - plus and minus in cases like -5 or -(2 * +2)
+ * * ListElement (LE) - list[number]
+ * * Braces (B) - ( and )
+ * * Functions (F)
+ * * Atom (A) - return value
+ */
+class AFPToken {
+ // Types of tken
+ const TNONE = 'T_NONE';
+ const TID = 'T_ID';
+ const TKEYWORD = 'T_KEYWORD';
+ const TSTRING = 'T_STRING';
+ const TINT = 'T_INT';
+ const TFLOAT = 'T_FLOAT';
+ const TOP = 'T_OP';
+ const TBRACE = 'T_BRACE';
+ const TSQUAREBRACKET = 'T_SQUARE_BRACKET';
+ const TCOMMA = 'T_COMMA';
+ const TSTATEMENTSEPARATOR = 'T_STATEMENT_SEPARATOR';
+
+ public $type;
+ public $value;
+ public $pos;
+
+ public function __construct( $type = self::TNONE, $value = null, $pos = 0 ) {
+ $this->type = $type;
+ $this->value = $value;
+ $this->pos = $pos;
+ }
+}