Polish dump-ast example code
diff --git a/examples/dump-syntax/Cargo.toml b/examples/dump-syntax/Cargo.toml
new file mode 100644
index 0000000..39d9622
--- /dev/null
+++ b/examples/dump-syntax/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "dump-syntax"
+version = "0.0.0"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+publish = false
+
+[dependencies]
+syn = { path = "../..", features = ["full", "extra-traits"] }
+
+[[bin]]
+name = "dump-syntax"
+path = "main.rs"
diff --git a/examples/dump-syntax/README.md b/examples/dump-syntax/README.md
new file mode 100644
index 0000000..3b23736
--- /dev/null
+++ b/examples/dump-syntax/README.md
@@ -0,0 +1,28 @@
+Parse a Rust source file into a `syn::File` and print out a debug representation
+of the syntax tree.
+
+Use the following command from this directory to test this program by running it
+on its own source code:
+
+```
+cargo run -- main.rs
+```
+
+The output will begin with:
+
+```
+File {
+    shebang: None,
+    attrs: [
+        Attribute {
+            pound_token: Pound,
+            style: Inner(
+                Bang
+            ),
+            bracket_token: Bracket,
+            path: Path {
+                leading_colon: None,
+                segments: [
+    ...
+}
+```
diff --git a/examples/dump-syntax/main.rs b/examples/dump-syntax/main.rs
new file mode 100644
index 0000000..584fe3c
--- /dev/null
+++ b/examples/dump-syntax/main.rs
@@ -0,0 +1,46 @@
+//! Parse a Rust source file into a `syn::File` and print out a debug
+//! representation of the syntax tree.
+//!
+//! Use the following command from this directory to test this program by
+//! running it on its own source code:
+//!
+//!     cargo run -- main.rs
+//!
+//! The output will begin with:
+//!
+//!     File {
+//!         shebang: None,
+//!         attrs: [
+//!             Attribute {
+//!                 pound_token: Pound,
+//!                 style: Inner(
+//!         ...
+//!     }
+
+extern crate syn;
+
+use std::env;
+use std::fs::File;
+use std::io::Read;
+use std::process;
+
+fn main() {
+    let mut args = env::args();
+    let _ = args.next(); // executable name
+
+    let filename = match (args.next(), args.next()) {
+        (Some(filename), None) => filename,
+        _ => {
+            eprintln!("Usage: dump-syntax path/to/filename.rs");
+            process::exit(1);
+        }
+    };
+
+    let mut file = File::open(&filename).expect("Unable to open file");
+
+    let mut src = String::new();
+    file.read_to_string(&mut src).expect("Unable to read file");
+
+    let syntax = syn::parse_file(&src).expect("Unable to parse file");
+    println!("{:#?}", syntax);
+}