Mercurial > hg > Members > kono > PLparser
comparison src/plparser/PropertyListParser.java @ 5:29b5497fc942
full test passed.
author | one |
---|---|
date | Sun, 29 Aug 2010 20:28:00 +0900 |
parents | 29c0866e3a84 |
children | 563bcb96e4fa |
comparison
equal
deleted
inserted
replaced
4:29c0866e3a84 | 5:29b5497fc942 |
---|---|
96 * expr1 {} Dictionary | 96 * expr1 {} Dictionary |
97 * @return list of node (key,value,key,value) | 97 * @return list of node (key,value,key,value) |
98 */ | 98 */ |
99 public LinkedList<Node> expr1() { | 99 public LinkedList<Node> expr1() { |
100 LinkedList<Node> list = new LinkedList<Node>(); | 100 LinkedList<Node> list = new LinkedList<Node>(); |
101 if (nextToken.type==TokenID.CloseCurParen ) return list; | |
101 expr2(list); | 102 expr2(list); |
102 while(nextToken.type == TokenID.Semicolon) { | 103 while(nextToken.type == TokenID.Semicolon) { |
103 nextToken(); | 104 nextToken(); |
104 if (nextToken.type==TokenID.CloseCurParen ) return list; | 105 if (nextToken.type==TokenID.CloseCurParen ) return list; |
105 expr2(list); | 106 expr2(list); |
127 * expr3 Array | 128 * expr3 Array |
128 * @return list of node | 129 * @return list of node |
129 */ | 130 */ |
130 public LinkedList<Node> expr3() { | 131 public LinkedList<Node> expr3() { |
131 LinkedList<Node>list = new LinkedList<Node>(); | 132 LinkedList<Node>list = new LinkedList<Node>(); |
133 if (nextToken.type==TokenID.CloseParen) return list; | |
132 Node n1 = term(); | 134 Node n1 = term(); |
133 list.add(n1); | 135 list.add(n1); |
134 while (nextToken.type==TokenID.Comma) { | 136 while (nextToken.type==TokenID.Comma) { |
137 nextToken(); | |
138 if (nextToken.type==TokenID.CloseParen) return list; | |
135 Node n2 = term(); | 139 Node n2 = term(); |
136 if (nextToken.type==TokenID.CloseParen) return list; | |
137 list.add(n2); | 140 list.add(n2); |
138 } | 141 } |
139 return list; | 142 return list; |
140 } | 143 } |
141 | 144 |
155 case Paren: // Array | 158 case Paren: // Array |
156 nextToken(); | 159 nextToken(); |
157 LinkedList<Node>list1 = expr3(); | 160 LinkedList<Node>list1 = expr3(); |
158 if (nextToken.type==TokenID.CloseParen) { | 161 if (nextToken.type==TokenID.CloseParen) { |
159 } else { // syntax error; | 162 } else { // syntax error; |
160 scanner.error(") expected but got "+nextToken); | 163 error(") expected but got "+nextToken); |
161 return lf.trueNode(); | 164 return lf.trueNode(); |
162 } | 165 } |
166 nextToken(); | |
163 return lf.arrayNode(list1); | 167 return lf.arrayNode(list1); |
164 case CurParen: // Dictionary | 168 case CurParen: // Dictionary |
165 nextToken(); | 169 nextToken(); |
166 LinkedList<Node> list = expr1(); | 170 LinkedList<Node> list = expr1(); |
167 if (nextToken.type==TokenID.CloseCurParen) { | 171 if (nextToken.type==TokenID.CloseCurParen) { |
168 } else { // syntax error; | 172 } else { // syntax error; |
169 scanner.error("} expected"); | 173 error("} expected but got "+nextToken); |
170 } | 174 } |
175 nextToken(); | |
171 return lf.dictionaryNode(list); | 176 return lf.dictionaryNode(list); |
172 case NUMBER: | 177 case NUMBER: |
173 n = lf.numberNode(Integer.parseInt(nextToken.name)); | 178 n = lf.numberNode(Integer.parseInt(nextToken.name)); |
174 break; | 179 break; |
175 case NULL: | 180 case NULL: |