2
* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License as published by
4
* the Free Software Foundation; either version 2 of the License, or
5
* (at your option) any later version.
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
12
* You should have received a copy of the GNU General Public License
13
* along with this program; if not, write to the Free Software
14
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
* Copyright (C) 2008 University of Waikato, Hamilton, New Zealand
22
package weka.filters.unsupervised.instance.subsetbyexpression;
24
import weka.core.parser.java_cup.runtime.SymbolFactory;
28
* A scanner for evaluating whether an Instance is to be included in a subset
31
* @author FracPete (fracpete at waikato dot ac dot nz)
32
* @version $Revision: 1.2 $
41
// Author: FracPete (fracpete at waikato dot ac dot nz)
42
// Version: $Revision: 1.2 $
43
protected SymbolFactory m_SymFactory;
45
protected StringBuffer m_String = new StringBuffer();
47
public Scanner(InputStream r, SymbolFactory sf) {
53
return m_SymFactory.newSymbol("EOF",sym.EOF);
61
"-" { return m_SymFactory.newSymbol("Minus", sym.MINUS); }
62
"+" { return m_SymFactory.newSymbol("Plus", sym.PLUS); }
63
"*" { return m_SymFactory.newSymbol("Times", sym.TIMES); }
64
"/" { return m_SymFactory.newSymbol("Division", sym.DIVISION); }
67
"<" { return m_SymFactory.newSymbol("Less than", sym.LT); }
68
"<=" { return m_SymFactory.newSymbol("Less or equal than", sym.LE); }
69
">" { return m_SymFactory.newSymbol("Greater than", sym.GT); }
70
">=" { return m_SymFactory.newSymbol("Greater or equal than", sym.GE); }
71
"=" { return m_SymFactory.newSymbol("Equals", sym.EQ); }
72
"is" { return m_SymFactory.newSymbol("Is", sym.IS); }
73
"not" { return m_SymFactory.newSymbol("Not", sym.NOT); }
74
"and" { return m_SymFactory.newSymbol("And", sym.AND); }
75
"or" { return m_SymFactory.newSymbol("Or", sym.OR); }
76
"true" { return m_SymFactory.newSymbol("True", sym.TRUE); }
77
"false" { return m_SymFactory.newSymbol("False", sym.FALSE); }
80
"abs" { return m_SymFactory.newSymbol("Abs", sym.ABS); }
81
"sqrt" { return m_SymFactory.newSymbol("Sqrt", sym.SQRT); }
82
"log" { return m_SymFactory.newSymbol("Log", sym.LOG); }
83
"exp" { return m_SymFactory.newSymbol("Exp", sym.EXP); }
84
"sin" { return m_SymFactory.newSymbol("Sin", sym.SIN); }
85
"cos" { return m_SymFactory.newSymbol("Cos", sym.COS); }
86
"tan" { return m_SymFactory.newSymbol("Tan", sym.TAN); }
87
"rint" { return m_SymFactory.newSymbol("Rint", sym.RINT); }
88
"floor" { return m_SymFactory.newSymbol("Floor", sym.FLOOR); }
89
"pow" { return m_SymFactory.newSymbol("Pow", sym.POW); }
90
"ceil" { return m_SymFactory.newSymbol("Ceil", sym.CEIL); }
92
// numbers and variables
93
"'" { yybegin(STRING); m_String.setLength(0); }
94
[0-9][0-9]*\.?[0-9]* { return m_SymFactory.newSymbol("Number", sym.NUMBER, new Double(yytext())); }
95
-[0-9][0-9]*\.?[0-9]* { return m_SymFactory.newSymbol("Number", sym.NUMBER, new Double(yytext())); }
96
[A][T][T][0-9][0-9]* { return m_SymFactory.newSymbol("Attribute", sym.ATTRIBUTE, new String(yytext())); }
97
"CLASS" { return m_SymFactory.newSymbol("Class", sym.ATTRIBUTE, new String(yytext())); }
100
[ \r\n\t\f] { /* ignore white space. */ }
103
"," { return m_SymFactory.newSymbol("Comma", sym.COMMA); }
104
"(" { return m_SymFactory.newSymbol("Left Bracket", sym.LPAREN); }
105
")" { return m_SymFactory.newSymbol("Right Bracket", sym.RPAREN); }
106
"ismissing" { return m_SymFactory.newSymbol("Missing", sym.ISMISSING); }
110
"'" { yybegin(YYINITIAL); return m_SymFactory.newSymbol("String", sym.STRING, new String(m_String.toString())); }
111
. { m_String.append(yytext()); }
115
. { System.err.println("Illegal character: " + yytext()); }