AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
Tokenizer.java
Go to the documentation of this file.
1package aud.example.expr;
2
4
5import java.util.regex.Pattern;
6
9public class Tokenizer extends LexicalScanner {
10
11 protected static final Pattern P_PLUS = Pattern.compile("\\+");
12 protected static final Pattern P_MINUS = Pattern.compile("-");
13 protected static final Pattern P_TIMES = Pattern.compile("\\*");
14 protected static final Pattern P_DIVIDE = Pattern.compile("/");
15 protected static final Pattern P_POWER = Pattern.compile("(\\*\\*)|\\^");
16 protected static final Pattern P_LEFTPAREN = Pattern.compile("\\(");
17 protected static final Pattern P_RIGHTPAREN = Pattern.compile("\\)");
18
19 public static final int PLUS='+';
20 public static final int MINUS='-';
21 public static final int TIMES='*';
22 public static final int DIVIDE='/';
23 public static final int POWER='^';
24 public static final int LEFT_PAREN='(';
25 public static final int RIGHT_PAREN=')';
26
27 public static final int IDENTIFIER=0x100;
28 public static final int NUMBER=0x101;
29
30 protected static final LexicalScanner.Rule[] RULES =
31 {
34 new LexicalScanner.Rule(POWER, P_POWER), // test '**' before '*' !
41 };
42
44 public Tokenizer(String input) {
45 super(RULES,input);
46 }
47
49 public static void main(String[] args) {
50
52 (args.length==0 ? "2*(3+4)/x-3.14+2^3-2**3" : args[0]);
53
54 System.out.println("input = '"+t.remainder()+"'");
55
56 while (t.next()!=END_OF_INPUT) {
57 if (t.matchedTokenId()==NO_MATCH) {
58 System.out.println("syntax error near '"+t.remainder()+"'");
59 break;
60 }
61 else if (t.matchedTokenId()==NUMBER) {
62 double d=Double.parseDouble(t.matchedText());
63 System.out.println("read a number: "+d);
64 }
65 System.out.println("next token id = "+t.matchedTokenId());
66 System.out.println("matched text = '"+t.matchedText()+"'");
67 System.out.println("remaining input = '"+t.remainder()+"'");
68 }
69 }
70}
Breaks input string into pieces ("tokens").
Definition: Tokenizer.java:9
static final int POWER
Definition: Tokenizer.java:23
static final Pattern P_POWER
Definition: Tokenizer.java:15
static final Pattern P_TIMES
Definition: Tokenizer.java:13
static final int RIGHT_PAREN
Definition: Tokenizer.java:25
static final Pattern P_RIGHTPAREN
Definition: Tokenizer.java:17
static final LexicalScanner.Rule[] RULES
Definition: Tokenizer.java:30
static final int LEFT_PAREN
Definition: Tokenizer.java:24
static final int MINUS
Definition: Tokenizer.java:20
static final Pattern P_PLUS
Definition: Tokenizer.java:11
static final Pattern P_DIVIDE
Definition: Tokenizer.java:14
static final int IDENTIFIER
Definition: Tokenizer.java:27
static final int DIVIDE
Definition: Tokenizer.java:22
static final int PLUS
Definition: Tokenizer.java:19
static final int NUMBER
Definition: Tokenizer.java:28
static final Pattern P_MINUS
Definition: Tokenizer.java:12
static void main(String[] args)
testing and example for usage
Definition: Tokenizer.java:49
Tokenizer(String input)
create new tokenizer for input
Definition: Tokenizer.java:44
static final int TIMES
Definition: Tokenizer.java:21
static final Pattern P_LEFTPAREN
Definition: Tokenizer.java:16
Base class for a simple lexical scanner.
static final int END_OF_INPUT
no more input
int next(Rule[] rules)
match remainder to table of rules @endiliteral
int matchedTokenId()
get result of last call to next()
String matchedText()
get text of last match or call to next
String remainder()
get remaining text
static final int NO_MATCH
no match (usually implies a syntax error)
static final Pattern P_IDENTIFIER
identifiers
static final Pattern P_FLOAT
floating point number
utilities (not related to AuD lecture)
Definition: Colormap.java:1
AuD lecture: Data structures, algorithms, examples.