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: