!636 !629 // standard functions !1000302 // class Java20 main { psvm { String src = takeInput(args, "class main { String s; }"); src = src.replace("\r\n", "\n"); String[] tokens = tokenizeJava(src); for (String t : tokens) System.out.println(quote(t)); String joined = join(tokens); saveTextFile("output/joined.txt", joined); if (!src.equals(joined)) { for (int i = 0; i < joined.length(); i++) if (src.charAt(i) != joined.charAt(i)) { System.out.println("Char diff at " + i + ": " + (int) + src.charAt(i) + " vs " + (int) joined.charAt(i)); break; } throw new RuntimeException("Join fail"); } } static String[] tokenizeJava(String src) { Java20 lex = new Java20(); LineNumberReader source = new LineNumberReader(new StringReader(src)); List tokens = new ArrayList(); try { for (Object a; (a = lex.grab(source)) != lex.$;) tokens.add(lex.word()); } catch (Exception e) { throw new RuntimeException(e); } return tokens.toArray(new String[tokens.size()]); } static String takeInput(String[] args, String def) tex { if (args.length != 0) return loadSnippet(args[0]); return loadTextFile("input/input.txt", def); } static String join(String[] array) { StringBuilder buf = new StringBuilder(); for (String s : array) buf.append(s); return buf.toString(); } public static String quote(String s) { if (s == null) return "null"; return "\"" + s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\r", "\\r").replace("\n", "\\n") + "\""; } }