AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
ExpressionParser2.java
Go to the documentation of this file.
1package aud.example.expr;
2
3import aud.Queue;
4
36public class ExpressionParser2 extends ExpressionParser {
37
38
39
40 //
41 // Here is the implementation of BNF rules as methods:
42 //
43
50 @Override protected ExpressionTree sum(int level) {
51 verbose(level,"<sum>");
52
53 // temporary storage
56
57 ExpressionTree tree=product(level+1);
58
59 // parse iteratively
61 op.enqueue(lookahead());
62 nextToken();
63 expr.enqueue(product(level+1));
64 }
65
66 // setup tree
67 while (!op.is_empty()) {
68 if (op.dequeue()==Tokenizer.PLUS)
69 tree=new ExpressionTree(new Plus(),tree,expr.dequeue());
70 else
71 tree=new ExpressionTree(new Minus(),tree,expr.dequeue());
72 }
73 return tree;
74 }
75
82 protected ExpressionTree product(int level) {
83 verbose(level,"<product>");
84
85 // temporary storage
88
89 ExpressionTree tree=factor(level+1);
90
91 // parse iteratively
93 op.enqueue(lookahead());
94 nextToken();
95 expr.enqueue(factor(level+1));
96 }
97
98 // setup tree
99 while (!op.is_empty()) {
100 if (op.dequeue()==Tokenizer.TIMES)
101 tree=new ExpressionTree(new Times(),tree,expr.dequeue());
102 else
103 tree=new ExpressionTree(new Divide(),tree,expr.dequeue());
104 }
105 return tree;
106 }
107
108
110 public static void main(String[] args) {
111
112 String input=(args.length>0) ? args[0] : "a*b*c";
113
114 System.out.println("input = '"+input+"'");
115
117 p.setVerbose(true);
118 ExpressionTree tree=p.parse(input);
119
120 System.out.println("output = '"+tree+"'");
121
122 System.out.println(tree.postorder().toString());
123
124 System.out.println(tree.toTikZ());
125 }
126}
BinaryTreeTraversal< T >.Postorder postorder()
Get postorder iterator over nodes in tree .
String toTikZ()
get TikZ code for LaTeX export
Implementation of AbstractQueue as a (dynamically resized) circular buffer based on array.
Definition: Queue.java:11
void enqueue(T x)
Enqueue element at end of queue.
Definition: Queue.java:62
boolean is_empty()
Is queue empty?
Definition: Queue.java:35
T dequeue()
Remove front element from queue.
Definition: Queue.java:50
binary / operator: A/B
Definition: Divide.java:4
Same as ExpressionParser but using modified grammar to provide the usual left-associative expressions...
ExpressionTree sum(int level)
parse sum
static void main(String[] args)
test and example for usage
ExpressionTree product(int level)
parse product
ExpressionTree parse(String input)
parse input
ExpressionTree factor(int level)
parse factor
void setVerbose(boolean b)
set verbose mode (report state to System.err)
int lookahead()
helper: "lookahead" is the usual phrasing
void verbose(int level, String message)
helper: print out information
void nextToken()
helper: consume current token and advance to next token
Tree representation of arithmetic expression.
binary - operator: A-B
Definition: Minus.java:4
binary + operator: A+B
Definition: Plus.java:4
binary * operator: A*B
Definition: Times.java:4
Breaks input string into pieces ("tokens").
Definition: Tokenizer.java:9
static final int MINUS
Definition: Tokenizer.java:20
static final int DIVIDE
Definition: Tokenizer.java:22
static final int PLUS
Definition: Tokenizer.java:19
static final int TIMES
Definition: Tokenizer.java:21
AuD lecture: Data structures, algorithms, examples.
Definition: A234Tree.java:1