From f50dfa8add3dd2fa185aeb857efe3868e249dd8d Mon Sep 17 00:00:00 2001 From: Minero Aoki Date: Sun, 3 Feb 2008 09:30:23 +0000 Subject: [PATCH] * net/loveruby/cflat/compiler/Compiler.java (dumpTokenList): specialToken handling was wrong. We should trace t.specialToken while it becomes null, then follow t.next. * net/loveruby/cflat/parser/Parser.jj: write token name for special tokens. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3864 1b9489fe-b721-0410-924e-b54b9192deb8 --- ChangeLog | 9 ++++++ net/loveruby/cflat/compiler/Compiler.java | 36 ++++++++++++++++++----- net/loveruby/cflat/parser/Parser.jj | 8 ++--- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index e99cd9a..374aacb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sun Feb 3 18:30:18 2008 Minero Aoki + + * net/loveruby/cflat/compiler/Compiler.java (dumpTokenList): + specialToken handling was wrong. We should trace t.specialToken + while it becomes null, then follow t.next. + + * net/loveruby/cflat/parser/Parser.jj: write token name for + special tokens. + Mon Jan 21 05:37:28 2008 Minero Aoki * net/loveruby/cflat/compiler/Compiler.java: new command line diff --git a/net/loveruby/cflat/compiler/Compiler.java b/net/loveruby/cflat/compiler/Compiler.java index c62e682..cdeedc2 100644 --- a/net/loveruby/cflat/compiler/Compiler.java +++ b/net/loveruby/cflat/compiler/Compiler.java @@ -217,22 +217,44 @@ public class Compiler { } protected void dumpTokenList(Token t, PrintStream s) { - while (t != null) { - dumpTokenList(t.specialToken, s); + for (; t != null; t = t.next) { + if (t.specialToken != null) { + dumpSpecialTokenList(t.specialToken, s); + } dumpToken(t, s); - t = t.next; } } + protected void dumpSpecialTokenList(Token tok, PrintStream s) { + for (Token t = specialTokenHead(tok); t != null; t = t.next) { + dumpToken(t, s); + } + } + + protected Token specialTokenHead(Token tok) { + Token t = tok; + while (t.specialToken != null) { + t = t.specialToken; + } + return t; + } + static final protected int typeLen = 24; protected void dumpToken(Token t, PrintStream s) { - String type = ParserConstants.tokenImage[t.kind]; - s.print(type); - for (int n = typeLen - type.length(); n > 0; n--) { + ljustPrint(s, typeLen, tokenType(t)); + s.println(TextUtils.escapeString(t.image)); + } + + protected String tokenType(Token t) { + return ParserConstants.tokenImage[t.kind]; + } + + protected void ljustPrint(PrintStream s, int width, String value) { + s.print(value); + for (int n = width - value.length(); n > 0; n--) { s.print(" "); } - s.println(TextUtils.escapeString(t.image)); } protected AST parseFile(Options opts) diff --git a/net/loveruby/cflat/parser/Parser.jj b/net/loveruby/cflat/parser/Parser.jj index 3033fad..c11c8bc 100644 --- a/net/loveruby/cflat/parser/Parser.jj +++ b/net/loveruby/cflat/parser/Parser.jj @@ -270,20 +270,20 @@ PARSER_END(Parser) // linear-white-spaces // #@@range/lex_spaces{ -SPECIAL_TOKEN: { <([" ","\t","\n","\r"])+> } +SPECIAL_TOKEN: { } // #@@} // block comment // #@@range/lex_block_comment{ -MORE: { "/*" : IN_BLOCK_COMMENT } +MORE: { <"/*"> : IN_BLOCK_COMMENT } MORE: { <~[]> } - SPECIAL_TOKEN: { "*/" : DEFAULT } + SPECIAL_TOKEN: { : DEFAULT } // #@@} // line comment // #@@range/lex_line_comment{ SPECIAL_TOKEN: { - <"//" (~["\n","\r"])* ("\n" | "\r\n" | "\r")?> + } // #@@}