summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/AbuseFilter/includes/parser/AFPToken.php
blob: 2f7d9c9920e34f1a486f213e39c35f53ee62cad2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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;
	}
}