From b1183af95f45ba0162a91f7a308a4846418f03be Mon Sep 17 00:00:00 2001 From: Ben Winston Date: Sun, 21 May 2023 13:57:41 -0400 Subject: move to using 2 stacks --- parser.d | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'parser.d') diff --git a/parser.d b/parser.d index 978b218..80e1626 100644 --- a/parser.d +++ b/parser.d @@ -252,6 +252,7 @@ class Parser { int line; bool peekable() { + writefln("pos %d source %d", pos, source.length); return (pos < source.length); } @@ -259,25 +260,36 @@ class Parser { if (pos < source.length) { return source[pos]; } else { - //writeln("peek returns null"); + writeln("peek returns null"); return '\0'; } } char advance() { + if (!peekable()) { + writeln("trying to advance() beyond the end!!!"); + return '\0'; + } else { + char ret = peek(); + pos++; + return ret; + } + /* char ret = peek(); if (ret != '\0') { pos++; } return ret; + */ } void skipWhitespace() { - while (canFind([' ', '\t', '\r', '\n'], peek())) { + while (peekable() && canFind([' ', '\t', '\r', '\n'], peek())) { if (peek() == '\n') { line++; } - pos++; + //pos++; + advance(); } } @@ -353,6 +365,8 @@ class Parser { advance(); // closing paren + writefln("ending DEF pos %d", pos); + return def; } @@ -406,6 +420,7 @@ class Parser { return new ParseError("unterminated block", line); } + writefln("ending block pos %d", pos); advance(); // consume closing paren return block; @@ -480,6 +495,9 @@ class Parser { default: return parseSymbol(); } + + writeln("FELL THROUGH ON PARSE FORM"); + advance(); return new Atom(0, -1); -- cgit v1.2.3