import java.io.*; import java.util.*; public class Idlp { String parsebuf; int len; void error(String msg) { System.out.println("Idlp err : " + msg); } void trace(String msg) { System.out.println("Idlp : " + msg); } int get(int pos) { if (pos<0 || pos>=len) return -1; else return (int) parsebuf.charAt(pos); } int skipwhite(int pos) { trace("skipwhite()"); while (pos < len) { int ch = get(pos); if (ch == '/' && get(pos + 1) == '/') { pos += 2; while (pos < len) { ch = get(pos); if (ch == '\n' || ch == '\r') break; pos++; } } else if (!Character.isWhitespace(ch)) { break; } pos++; } return pos; } boolean match(String key) { trace("match(" + key + ")"); int p = 0; for (int i=0 ; i= len) break; int ch = get(pos); int p = getword(pos); if (p < 0) return false; if (p<=pos) { error("expected word"); return false; } trace("word: " + word); if (word.length() == 0) break; if (word.charAt(0) == '#') { p = getDirective(word, pos); if (p < 0) return false; } else if (word.equals("module")) { pos = p; p = getModule(pos); if (p<0) return false; } pos = p; } return true; } boolean run() { parsebuf = ""; boolean ret = true; try { StringBuffer inbuf = new StringBuffer(); FileReader in = new FileReader("svg.idl"); while (true) { int ch = in.read(); if (ch < 0) break; inbuf.append((char)ch); } in.close(); parsebuf = inbuf.toString(); ret = parse(); } catch (IOException e) { error("run : " + e); return false; } return ret; } public Idlp() { } public static void main(String argv[]) { Idlp idlp = new Idlp(); idlp.run(); } }