Chromium Code Reviews| Index: pkg/analyzer-experimental/example/parser_driver.dart |
| =================================================================== |
| --- pkg/analyzer-experimental/example/parser_driver.dart (revision 0) |
| +++ pkg/analyzer-experimental/example/parser_driver.dart (revision 0) |
| @@ -0,0 +1,54 @@ |
| +#!/usr/bin/env dart |
| + |
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +import 'package:analyzer-experimental/src/generated/ast.dart'; |
| +import 'package:analyzer-experimental/src/generated/error.dart'; |
| +import 'package:analyzer-experimental/src/generated/java_core.dart'; |
| +import 'package:analyzer-experimental/src/generated/parser.dart'; |
| +import 'package:analyzer-experimental/src/generated/scanner.dart'; |
| + |
| +import 'dart:io'; |
| + |
| + |
| +main() { |
| + |
| + print('working dir ${new File('.').fullPathSync()}'); |
| + |
| + var args = new Options().arguments; |
| + if (args.length == 0) { |
| + print('Usage: parser_driver [files_to_parse]'); |
| + exit(0); |
| + } |
| + |
| + for (var arg in args) { |
| + _parse(new File(arg)); |
| + } |
| + |
| +} |
| + |
| +_parse(File file) { |
| + var src = file.readAsStringSync(); |
| + var scanner = new StringScanner(null, src, null); |
|
scheglov
2013/02/05 00:16:40
You should pass listener to the scanner.
pquitslund
2013/02/05 00:24:14
Done.
|
| + var token = scanner.tokenize(); |
| + var listener = new _ErrorCollector(); |
| + var parser = new Parser(null, listener); |
| + var unit = parser.parseCompilationUnit(token); |
| + var visitor = new _ASTVisitor(); |
| + unit.accept(visitor); |
| +} |
| + |
| +class _ErrorCollector extends AnalysisErrorListener { |
| + List<AnalysisError> errors; |
| + onError(error) => errors.add(error); |
|
scheglov
2013/02/05 00:16:40
Why do you add errors if you don't use them?
pquitslund
2013/02/05 00:24:14
Good point. Updated to print them out.
|
| +} |
| + |
| +class _ASTVisitor extends GeneralizingASTVisitor { |
| + visitNode(ASTNode node) { |
| + print('${node.runtimeType} : <"${node.toString()}">'); |
| + return super.visitNode(node); |
| + } |
| +} |
| + |