diff options
Diffstat (limited to 'chapter05')
| -rw-r--r-- | chapter05/src/main/java/com/seaofnodes/simple/Parser.java | 4 | ||||
| -rw-r--r-- | chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java index 79b50672..a287f997 100644 --- a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java @@ -115,7 +115,9 @@ public class Parser { // Enter a new scope _scope.push(); Node n = null; - while (!match("}") && !_lexer.isEOF()) { + while (!match("}")) { + if (_lexer.isEOF()) throw errorSyntax("}"); + Node n0 = parseStatement(); if (n0 != null) n = n0; // Allow null returns from eg showGraph } diff --git a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java index ab956e9f..254f4530 100644 --- a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java +++ b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java @@ -429,4 +429,14 @@ return c; // this test used to fail in chapter 1 assertEquals("return -100;", new Parser("return -100;").parse().print()); } + + @Test + public void testBad6() { + try { + new Parser("int a=1; int b=2; int c=0; { int b=3; c=a+b;").parse(); + fail(); + } catch( RuntimeException e ) { + assertEquals("Syntax error, expected }: ",e.getMessage()); + } + } } |
