(input)
| 256 | } |
| 257 | |
| 258 | function parse(input){ |
| 259 | var isclass=false |
| 260 | return parse_toplevel(); |
| 261 | function is_kw(kw) { |
| 262 | var tok = input.peek(); |
| 263 | return tok && tok.type == "kw" && (!kw || tok.value == kw) && tok; |
| 264 | } |
| 265 | function is_punc(ch) { |
| 266 | var tok = input.peek(); |
| 267 | return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok; |
| 268 | } |
| 269 | function is_sp(ch) { |
| 270 | var tok = input.peek(); |
| 271 | return tok && tok.type == "sp" && (!ch || tok.value == ch) && tok; |
| 272 | } |
| 273 | function is_kw(kw) { |
| 274 | var tok = input.peek(); |
| 275 | return tok && tok.type == "kw" && (!kw || tok.value == kw) && tok; |
| 276 | } |
| 277 | function is_op(op) { |
| 278 | var tok = input.peek(); |
| 279 | return tok && tok.type == "op" && (!op || tok.value == op) && tok; |
| 280 | } |
| 281 | function is_id() { |
| 282 | var tok = input.peek(); |
| 283 | return tok.type=='id'; |
| 284 | } |
| 285 | function is_num(){ |
| 286 | var tok = input.peek(); |
| 287 | return tok.type=='num'; |
| 288 | } |
| 289 | function is_str(){ |
| 290 | var tok = input.peek(); |
| 291 | return tok.type=='str'; |
| 292 | } |
| 293 | |
| 294 | function skip_punc(ch) { |
| 295 | if (is_punc(ch)) input.next(); |
| 296 | else input.croak("Expecting punctuation: \"" + ch + "\""); |
| 297 | } |
| 298 | function skip_split(ch) { |
| 299 | if (is_sp(ch)) input.next(); |
| 300 | else input.croak("Expecting punctuation: \"" + ch + "\""); |
| 301 | } |
| 302 | function parse_next() { |
| 303 | var n = input.next(); |
| 304 | // console.log('parse next ',n) |
| 305 | return n; |
| 306 | } |
| 307 | function parse_toplevel() { |
| 308 | var prog = []; |
| 309 | while (!input.eof()) { |
| 310 | prog.push(parse_statement()); |
| 311 | } |
| 312 | return { type: "top", 'body': prog }; |
| 313 | } |
| 314 | |
| 315 | function parse_id(iscls){ |
no test coverage detected