From: adam Date: Fri, 20 Apr 2007 03:19:33 +0000 (-0400) Subject: better reporting of indentation related parse errors X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=a60fa7d36f9039881c6eac2b771bd53943d997b7;hp=83bcf9559e9338c906b3c262ce7a1ecca7ffe3ed better reporting of indentation related parse errors darcs-hash:20070420031933-5007d-bebc5f8800a92a3e6bd5d11ac0f9743112889c3c.gz --- diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index ca8e1d5..5c1b92f 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -107,7 +107,8 @@ class GSS { public boolean isDone() throws ParseFailed { if (token != null) return false; if (token==null && finalResult==null) - ParseFailed.error("unexpected end of file", this); + ParseFailed.error("unexpected end of file", this, null, + getLocation().createRegion(getLocation())); return true; } @@ -140,8 +141,23 @@ class GSS { } numNewNodes = next==null ? 0 : next.hash.size(); viewPos = this.pos; - if (!good && token!=null) ParseFailed.error("unexpected character", this); - if (token==null && finalResult==null) ParseFailed.error("unexpected end of file", this); + if (!good && token!=null) { + String toks = token+""; + if (toks.length()==1 && toks.charAt(0) == edu.berkeley.sbp.chr.CharAtom.left) { + ParseFailed.error("unexpected increase in indentation", this, + token, getRegionFromThisToNext()); + } else if (toks.length()==1 && toks.charAt(0) == edu.berkeley.sbp.chr.CharAtom.right) { + ParseFailed.error("unexpected decrease in indentation", this, + token, getRegionFromThisToNext()); + } else { + ParseFailed.error("unexpected character '"+ANSI.cyan(StringUtil.escapify(token+"", + "\\\'\r\n"))+"'", + this, token, getRegionFromThisToNext()); + } + } + if (token==null && finalResult==null) + ParseFailed.error("unexpected end of file", this, null, + getLocation().createRegion(getLocation())); for(Node n : hash) n.check(); }