diff --git a/aidl_language_y.yy b/aidl_language_y.yy
index bba7f0a..d131578 100644
--- a/aidl_language_y.yy
+++ b/aidl_language_y.yy
@@ -72,12 +72,17 @@
     std::vector<std::unique_ptr<AidlTypeSpecifier>>* type_args;
 }
 
+%destructor { } <character>
+%destructor { } <direction>
+%destructor { delete ($$); } <*>
+
 %token<token> ANNOTATION "annotation"
 %token<token> C_STR "string literal"
 %token<token> IDENTIFIER "identifier"
 %token<token> INTERFACE "interface"
 %token<token> PARCELABLE "parcelable"
 %token<token> ONEWAY "oneway"
+%token<token> ENUM "enum"
 
 %token<character> CHARVALUE "char literal"
 %token<token> FLOATVALUE "float literal"
@@ -95,7 +100,6 @@
 %token PACKAGE "package"
 %token TRUE_LITERAL "true"
 %token FALSE_LITERAL "false"
-%token ENUM "enum"
 
 %type<declaration> decl
 %type<variable_list> variable_decls
@@ -204,17 +208,24 @@
 parcelable_decl
  : PARCELABLE qualified_name ';' {
     $$ = new AidlParcelable(loc(@2), $2, ps->Package(), $1->GetComments());
+    delete $1;
   }
  | PARCELABLE qualified_name CPP_HEADER C_STR ';' {
     $$ = new AidlParcelable(loc(@2), $2, ps->Package(), $1->GetComments(), $4->GetText());
+    delete $1;
+    delete $4;
   }
  | PARCELABLE identifier '{' variable_decls '}' {
     AidlQualifiedName* name = new AidlQualifiedName(loc(@2), $2->GetText(), $2->GetComments());
     $$ = new AidlStructuredParcelable(loc(@2), name, ps->Package(), $1->GetComments(), $4);
+    delete $1;
+    delete $2;
+    delete $4;
  }
  | PARCELABLE error ';' {
     ps->AddError();
-    $$ = NULL;
+    $$ = nullptr;
+    delete $1;
   };
 
 variable_decls
@@ -231,10 +242,12 @@
 variable_decl
  : type identifier ';' {
    $$ = new AidlVariableDeclaration(loc(@2), $1, $2->GetText());
+   delete $2;
  }
  | type identifier '=' constant_value ';' {
    // TODO(b/123321528): Support enum type default assignments (TestEnum foo = TestEnum.FOO).
    $$ = new AidlVariableDeclaration(loc(@2), $1, $2->GetText(),  $4);
+   delete $2;
  }
  | error ';' {
    ps->AddError();
@@ -265,9 +278,9 @@
  :
   { $$ = new std::vector<std::unique_ptr<AidlMember>>(); }
  | interface_members method_decl
-  { $1->push_back(std::unique_ptr<AidlMember>($2)); }
+  { $1->push_back(std::unique_ptr<AidlMember>($2)); $$ = $1; }
  | interface_members constant_decl
-  { $1->push_back(std::unique_ptr<AidlMember>($2)); }
+  { $1->push_back(std::unique_ptr<AidlMember>($2)); $$ = $1; }
  | interface_members error ';' {
     ps->AddError();
     $$ = $1;
@@ -323,6 +336,7 @@
  possibly_multiline_string
  : C_STR {
     $$ = new string($1->GetText());
+    delete $1;
  }
  | possibly_multiline_string '+' C_STR {
    $$ = $1;
@@ -362,6 +376,7 @@
    }
  | enumerators ',' enumerator {
     $1->push_back(std::unique_ptr<AidlEnumerator>($3));
+    $$ = $1;
    }
  ;
 
@@ -374,6 +389,7 @@
 enum_decl
  : ENUM identifier enum_decl_body {
     $$ = new AidlEnumDeclaration(loc(@2), $2->GetText(), $3, ps->Package());
+    delete $1;
     delete $2;
     delete $3;
    }
@@ -395,6 +411,7 @@
  | type identifier '(' arg_list ')' '=' INTVALUE ';' {
     $$ = new AidlMethod(loc(@2), false, $1, $2->GetText(), $4, $1->GetComments(), std::stoi($7->GetText()));
     delete $2;
+    delete $7;
   }
  | annotation_list ONEWAY type identifier '(' arg_list ')' '=' INTVALUE ';' {
     const std::string& comments = ($1->size() > 0) ? $1->begin()->GetComments() : $2->GetComments();
@@ -403,6 +420,7 @@
     delete $1;
     delete $2;
     delete $4;
+    delete $9;
   };
 
 arg_list
@@ -426,9 +444,7 @@
     $$ = new AidlArgument(loc(@2), $1, $2->GetText());
     delete $2;
   }
- | error {
-    ps->AddError();
-  };
+ ;
 
 unannotated_type
  : qualified_name {
@@ -465,6 +481,7 @@
   }
  | type_args ',' unannotated_type {
     $1->emplace_back($3);
+    $$ = $1;
   };
 
 annotation_list
@@ -476,6 +493,7 @@
       $1->emplace_back(std::move(*$2));
       delete $2;
     }
+    $$ = $1;
   };
 
 parameter
@@ -516,6 +534,7 @@
       ps->AddError();
     }
     $$->SetComments($1->GetComments());
+    delete $1;
   };
  | ANNOTATION '(' parameter_list ')' {
     $$ = AidlAnnotation::Parse(loc(@1), $1->GetText(), $3);
@@ -523,6 +542,7 @@
       ps->AddError();
     }
     $$->SetComments($1->GetComments());
+    delete $1;
     delete $3;
  }
 
