Issue #14965:  Bring Tools/parser/unparse.py up to date with the Python 3.3. Grammar.
diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py
index e96ef54..9ae5b46 100644
--- a/Tools/parser/unparse.py
+++ b/Tools/parser/unparse.py
@@ -147,6 +147,14 @@
             self.dispatch(t.value)
         self.write(")")
 
+    def _YieldFrom(self, t):
+        self.write("(")
+        self.write("yield from")
+        if t.value:
+            self.write(" ")
+            self.dispatch(t.value)
+        self.write(")")
+
     def _Raise(self, t):
         self.fill("raise")
         if not t.exc:
@@ -158,12 +166,11 @@
             self.write(" from ")
             self.dispatch(t.cause)
 
-    def _TryExcept(self, t):
+    def _Try(self, t):
         self.fill("try")
         self.enter()
         self.dispatch(t.body)
         self.leave()
-
         for ex in t.handlers:
             self.dispatch(ex)
         if t.orelse:
@@ -171,22 +178,12 @@
             self.enter()
             self.dispatch(t.orelse)
             self.leave()
-
-    def _TryFinally(self, t):
-        if len(t.body) == 1 and isinstance(t.body[0], ast.TryExcept):
-            # try-except-finally
-            self.dispatch(t.body)
-        else:
-            self.fill("try")
+        if t.finalbody:
+            self.fill("finally")
             self.enter()
-            self.dispatch(t.body)
+            self.dispatch(t.finalbody)
             self.leave()
 
-        self.fill("finally")
-        self.enter()
-        self.dispatch(t.finalbody)
-        self.leave()
-
     def _ExceptHandler(self, t):
         self.fill("except")
         if t.type:
@@ -296,10 +293,7 @@
 
     def _With(self, t):
         self.fill("with ")
-        self.dispatch(t.context_expr)
-        if t.optional_vars:
-            self.write(" as ")
-            self.dispatch(t.optional_vars)
+        interleave(lambda: self.write(", "), self.dispatch, t.items)
         self.enter()
         self.dispatch(t.body)
         self.leave()
@@ -472,6 +466,10 @@
         self.dispatch(t.slice)
         self.write("]")
 
+    def _Starred(self, t):
+        self.write("*")
+        self.dispatch(t.value)
+
     # slice
     def _Ellipsis(self, t):
         self.write("...")
@@ -560,6 +558,12 @@
         if t.asname:
             self.write(" as "+t.asname)
 
+    def _withitem(self, t):
+        self.dispatch(t.context_expr)
+        if t.optional_vars:
+            self.write(" as ")
+            self.dispatch(t.optional_vars)
+
 def roundtrip(filename, output=sys.stdout):
     with open(filename, "rb") as pyfile:
         encoding = tokenize.detect_encoding(pyfile.readline)[0]