KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > examples > binding > Parser


1 package examples.binding;
2
3 import java.io.File JavaDoc;
4 import java.io.FileReader JavaDoc;
5 import java.io.Reader JavaDoc;
6 import java.io.IOException JavaDoc;
7
8 public class Parser {
9   private Reader JavaDoc reader;
10   private char current;
11   private boolean EOF=false;
12   private int line = 1;
13
14   public Parser(Reader JavaDoc r)
15     throws IOException JavaDoc
16   {
17     this.reader = r;
18     accept();
19   }
20
21   public boolean reachedEOF() {
22     return EOF;
23   }
24
25   public char current() {
26     return current;
27   }
28
29   public boolean isSpace() {
30     return current == ' ' || current == '\r'
31       || current == '\t' || current == '\n';
32   }
33
34   public void skipSpace()
35       throws IOException JavaDoc
36   {
37     while (isSpace() && !reachedEOF()) accept();
38   }
39
40   public String JavaDoc error() {
41     return "\nParse error at line:"+line+" char:"+current();
42   }
43
44   public void accept()
45     throws IOException JavaDoc
46   {
47     int c = reader.read();
48     if (c == -1) EOF = true;
49     current = (char) c;
50     if (c == '\n') line ++;
51   }
52
53   public void accept(char c)
54     throws IOException JavaDoc
55   {
56     if (current() == c)
57       accept();
58     else
59       throw new IOException JavaDoc("Unable to match character["+c+"]"+error());
60   }
61
62   public void accept(String JavaDoc s)
63     throws IOException JavaDoc
64   {
65     int i=0;
66     while (i < s.length()) {
67       if (s.charAt(i) == current()) { accept(); i++; }
68       else
69         throw new IOException JavaDoc("Unable to match string["+s+"]"+error());
70     }
71   }
72
73   public String JavaDoc readString()
74     throws IOException JavaDoc
75   {
76     StringBuffer JavaDoc b = new StringBuffer JavaDoc();
77     while (current() != ' ' &&
78            current() != '\n' &&
79            current() != '\r' &&
80            current() != '\t' &&
81            current() != ';' &&
82            !reachedEOF()) {
83       b.append(current());
84       accept();
85     }
86     return b.toString();
87   }
88
89   public BeanDescription parse()
90     throws IOException JavaDoc
91   {
92     BeanDescription desc = new BeanDescription();
93     skipSpace();
94     accept("Package:");
95     skipSpace();
96     String JavaDoc packageName = readString();
97     //System.out.println("package:"+packageName);
98
skipSpace();
99     accept("Namespace:");
100     skipSpace();
101     String JavaDoc namespace = readString();
102     //System.out.println("namespace:"+namespace);
103
skipSpace();
104     desc.setPackageName(packageName);
105     desc.setNamespaceName(namespace);
106     while(!reachedEOF()) {
107       desc.addBean(parseBeanInfo());
108     }
109     return desc;
110   }
111
112   public BeanInfo parseBeanInfo()
113     throws IOException JavaDoc
114   {
115     BeanInfo info = new BeanInfo();
116     skipSpace();
117     String JavaDoc name = readString();
118     info.setName(name);
119     //System.out.println("Reading:"+name);
120
skipSpace();
121     accept('{');
122     while(current()!='}') {
123       skipSpace();
124       info.addProperty(parseProperty());
125       skipSpace();
126     }
127     accept('}');
128     skipSpace();
129     return info;
130   }
131
132   public Property parseProperty()
133     throws IOException JavaDoc
134   {
135     skipSpace();
136     String JavaDoc type = readString();
137     skipSpace();
138     String JavaDoc prop = readString();
139     skipSpace();
140     accept(';');
141     if ("Integer".equals(type)) {
142       return new Property(prop,Property.INTEGER);
143     } else if ("String".equals(type)) {
144       return new Property(prop,Property.STRING);
145     } else {
146       return new Property(prop,Property.BEAN,type);
147     }
148   }
149
150   public static void main(String JavaDoc args[])
151     throws Exception JavaDoc
152   {
153     Parser parser = new Parser(new java.io.FileReader JavaDoc(args[0]));
154     BeanDescription description = parser.parse();
155     System.out.println(description);
156   }
157 }
158
159
Popular Tags