Recursive-Descent Parsing
22 March 2019 OSU CSE 1
Recursive-Descent Parsing 22 March 2019 OSU CSE 1 BL Compiler - - PowerPoint PPT Presentation
Recursive-Descent Parsing 22 March 2019 OSU CSE 1 BL Compiler Structure Code Tokenizer Parser Generator string of string of abstract string of characters tokens program integers (source code) (words) (object code) Note that
22 March 2019 OSU CSE 1
22 March 2019 OSU CSE 2
22 March 2019 OSU CSE 3
22 March 2019 OSU CSE 4
22 March 2019 OSU CSE 5
22 March 2019 OSU CSE 6
22 March 2019 OSU CSE 7
22 March 2019 OSU CSE 8
22 March 2019 OSU CSE 9
22 March 2019 OSU CSE 10
22 March 2019 OSU CSE 11
22 March 2019 OSU CSE 12
22 March 2019 OSU CSE 13
22 March 2019 OSU CSE 14
22 March 2019 OSU CSE 15
22 March 2019 OSU CSE 16
22 March 2019 OSU CSE 17
22 March 2019 OSU CSE 18
22 March 2019 OSU CSE 19
22 March 2019 OSU CSE 20
/** * Evaluates an expression and returns its value. * ... * @updates ts * @requires * [an expr string is a proper prefix of ts] * @ensures * valueOfExpr = [value of longest expr string at * start of #ts] and * #ts = [longest expr string at start of #ts] * ts */ private static int valueOfExpr(Queue<String> ts) {...}
22 March 2019 OSU CSE 21
22 March 2019 OSU CSE 22
/** * Evaluates a term and returns its value. * ... * @updates ts * @requires * [a term string is a proper prefix of ts] * @ensures * valueOfTerm = [value of longest term string at * start of #ts] and * #ts = [longest term string at start of #ts] * ts */ private static int valueOfTerm(Queue<String> ts) {...}
22 March 2019 OSU CSE 23
22 March 2019 OSU CSE 24
/** * Evaluates a factor and returns its value. * ... * @updates ts * @requires * [a factor string is a proper prefix of ts] * @ensures * valueOfFactor = [value of longest factor string at * start of #ts] and * #ts = [longest factor string at start of #ts] * ts */ private static int valueOfFactor(Queue<String> ts){ ... }
22 March 2019 OSU CSE 25
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 26
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 27
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 28
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 29
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 30
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 31
private static int valueOfExpr(Queue<String> ts) { int value = valueOfTerm(ts); while (ts.front().equals("+") || ts.front().equals("-")) { String op = ts.dequeue(); int nextTerm = valueOfTerm(ts); if (op.equals("+")) { value = value + nextTerm; } else /* "-" */ { value = value - nextTerm; } } return value; }
22 March 2019 OSU CSE 32
private static int valueOfTerm(Queue<String> ts) { }
22 March 2019 OSU CSE 33
22 March 2019 OSU CSE 34
22 March 2019 OSU CSE 35
22 March 2019 OSU CSE 36
22 March 2019 OSU CSE 37
22 March 2019 OSU CSE 38
22 March 2019 OSU CSE 39
22 March 2019 OSU CSE 40
22 March 2019 OSU CSE 41
22 March 2019 OSU CSE 42
22 March 2019 OSU CSE 43