From 43f2a09f106072727eaceb6134be02c03429b425 Mon Sep 17 00:00:00 2001 From: XmiliaH <45106915+XmiliaH@users.noreply.github.com> Date: Wed, 1 Nov 2023 10:25:56 +0100 Subject: Report unclosed block in parsing (#28) --- chapter05/src/main/java/com/seaofnodes/simple/Parser.java | 4 +++- .../src/test/java/com/seaofnodes/simple/Chapter05Test.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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()); + } + } } -- cgit v1.2.3