Remove obsolete way of initializing AST elements with serialized (string) data
authorNick Downing <nick@ndcode.org>
Sat, 26 Jan 2019 23:29:20 +0000 (10:29 +1100)
committerNick Downing <nick@ndcode.org>
Sat, 26 Jan 2019 23:29:20 +0000 (10:29 +1100)
ast.py
generate_ast.py

diff --git a/ast.py b/ast.py
index e2e5e6e..cad09e6 100644 (file)
--- a/ast.py
+++ b/ast.py
@@ -178,26 +178,10 @@ class AST(element.Element):
         name,
         code_props
       )
-      self._type = (
-        element.deserialize_int(_type)
-      if isinstance(_type, str) else
-        _type
-      )
-      self._tag = (
-        element.deserialize_int(_tag)
-      if isinstance(_tag, str) else
-        _tag
-      )
-      self.precedence = (
-        element.deserialize_int(precedence)
-      if isinstance(precedence, str) else
-        precedence
-      )
-      self.character_set = (
-        [element.deserialize_int(i) for i in character_set.split()]
-      if isinstance(character_set, str) else
-        character_set
-      )
+      self._type = _type
+      self._tag = _tag
+      self.precedence = precedence
+      self.character_set = character_set
     def serialize(self, ref_list):
       AST.TagOrSymbol.serialize(self, ref_list)
       self.set('_type', element.serialize_int(self._type))
@@ -507,11 +491,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.value = (
-          element.deserialize_int(value)
-        if isinstance(value, str) else
-          value
-        )
+        self.value = value
       def serialize(self, ref_list):
         AST.Production.Item.serialize(self, ref_list)
         self.set('value', element.serialize_int(self.value))
@@ -626,11 +606,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.symbol = (
-          element.deserialize_int(symbol)
-        if isinstance(symbol, str) else
-          symbol
-        )
+        self.symbol = symbol
       def serialize(self, ref_list):
         AST.Production.Item.serialize(self, ref_list)
         self.set('symbol', element.serialize_int(self.symbol))
@@ -702,16 +678,8 @@ class AST(element.Element):
           text,
           children
         )
-        self.symbol = (
-          element.deserialize_int(symbol)
-        if isinstance(symbol, str) else
-          symbol
-        )
-        self.has_space = (
-          element.deserialize_bool(has_space)
-        if isinstance(has_space, str) else
-          has_space
-        )
+        self.symbol = symbol
+        self.has_space = has_space
       def serialize(self, ref_list):
         AST.Production.Item.serialize(self, ref_list)
         self.set('symbol', element.serialize_int(self.symbol))
@@ -1002,41 +970,13 @@ class AST(element.Element):
         text,
         children
       )
-      self.lhs_nonterminal = (
-        element.deserialize_int(lhs_nonterminal)
-      if isinstance(lhs_nonterminal, str) else
-        lhs_nonterminal
-      )
-      self.n_symbols = (
-        element.deserialize_int(n_symbols)
-      if isinstance(n_symbols, str) else
-        n_symbols
-      )
-      self.last_terminal = (
-        element.deserialize_int(last_terminal)
-      if isinstance(last_terminal, str) else
-        last_terminal
-      )
-      self.precedence_terminal = (
-        element.deserialize_int(precedence_terminal)
-      if isinstance(precedence_terminal, str) else
-        precedence_terminal
-      )
-      self.has_empty = (
-        element.deserialize_bool(has_empty)
-      if isinstance(has_empty, str) else
-        has_empty
-      )
-      self.has_space = (
-        element.deserialize_bool(has_space)
-      if isinstance(has_space, str) else
-        has_space
-      )
-      self.take_space_right = (
-        element.deserialize_bool(take_space_right)
-      if isinstance(take_space_right, str) else
-        take_space_right
-      )
+      self.lhs_nonterminal = lhs_nonterminal
+      self.n_symbols = n_symbols
+      self.last_terminal = last_terminal
+      self.precedence_terminal = precedence_terminal
+      self.has_empty = has_empty
+      self.has_space = has_space
+      self.take_space_right = take_space_right
     def serialize(self, ref_list):
       element.Element.serialize(self, ref_list)
       self.set('lhs_nonterminal', element.serialize_int(self.lhs_nonterminal))
@@ -1290,11 +1230,7 @@ class AST(element.Element):
           text,
           children
         )
-        self._type = (
-          element.deserialize_int(_type)
-        if isinstance(_type, str) else
-          _type
-        )
+        self._type = _type
       def serialize(self, ref_list):
         Item.serialize(self, ref_list)
         self.set('_type', element.serialize_int(self._type))
@@ -1439,11 +1375,7 @@ class AST(element.Element):
           text,
           children
         )
-        self._type = (
-          element.deserialize_int(_type)
-        if isinstance(_type, str) else
-          _type
-        )
+        self._type = _type
       def serialize(self, ref_list):
         Item.serialize(self, ref_list)
         self.set('_type', element.serialize_int(self._type))
@@ -1943,11 +1875,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.value = (
-          element.deserialize_int(value)
-        if isinstance(value, str) else
-          value
-        )
+        self.value = value
       def serialize(self, ref_list):
         Item.serialize(self, ref_list)
         self.set('value', element.serialize_int(self.value))
@@ -2000,11 +1928,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.value = (
-          element.deserialize_int(value)
-        if isinstance(value, str) else
-          value
-        )
+        self.value = value
       def serialize(self, ref_list):
         Item.serialize(self, ref_list)
         self.set('value', element.serialize_int(self.value))
@@ -2598,42 +2522,14 @@ class AST(element.Element):
       )
       self.type_prefix = type_prefix
       self.name_prefix = name_prefix
-      self.api_pure = (
-        element.deserialize_int(api_pure)
-      if isinstance(api_pure, str) else
-        api_pure
-      )
-      self.locations = (
-        element.deserialize_bool(locations)
-      if isinstance(locations, str) else
-        locations
-      )
-      self.error_verbose = (
-        element.deserialize_bool(error_verbose)
-      if isinstance(error_verbose, str) else
-        error_verbose
-      )
+      self.api_pure = api_pure
+      self.locations = locations
+      self.error_verbose = error_verbose
       self.parse_lac = parse_lac
-      self.debug = (
-        element.deserialize_bool(debug)
-      if isinstance(debug, str) else
-        debug
-      )
-      self.defines = (
-        element.deserialize_bool(defines)
-      if isinstance(defines, str) else
-        defines
-      )
-      self.expect = (
-        element.deserialize_int(expect)
-      if isinstance(expect, str) else
-        expect
-      )
-      self.verbose = (
-        element.deserialize_bool(verbose)
-      if isinstance(verbose, str) else
-        verbose
-      )
+      self.debug = debug
+      self.defines = defines
+      self.expect = expect
+      self.verbose = verbose
     def serialize(self, ref_list):
       AST.Section1Or2.serialize(self, ref_list)
       self.set('type_prefix', element.serialize_str(self.type_prefix))
@@ -2992,11 +2888,7 @@ class AST(element.Element):
         text,
         children
       )
-      self.user_token = (
-        element.deserialize_int(user_token)
-      if isinstance(user_token, str) else
-        user_token
-      )
+      self.user_token = user_token
     def serialize(self, ref_list):
       AST.TagOrSymbolRef.serialize(self, ref_list)
       self.set('user_token', element.serialize_int(self.user_token))
@@ -3156,11 +3048,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.character = (
-          element.deserialize_int(character)
-        if isinstance(character, str) else
-          character
-        )
+        self.character = character
       def serialize(self, ref_list):
         AST.Text.Item.serialize(self, ref_list)
         self.set('character', element.serialize_int(self.character))
@@ -3206,16 +3094,8 @@ class AST(element.Element):
           text,
           children
         )
-        self.offset = (
-          element.deserialize_int(offset)
-        if isinstance(offset, str) else
-          offset
-        )
-        self.index = (
-          element.deserialize_int(index)
-        if isinstance(index, str) else
-          index
-        )
+        self.offset = offset
+        self.index = index
       def serialize(self, ref_list):
         AST.Text.Item.serialize(self, ref_list)
         self.set('offset', element.serialize_int(self.offset))
@@ -3274,16 +3154,8 @@ class AST(element.Element):
           children
         )
         self.tag_name = tag_name
-        self.offset = (
-          element.deserialize_int(offset)
-        if isinstance(offset, str) else
-          offset
-        )
-        self.index = (
-          element.deserialize_int(index)
-        if isinstance(index, str) else
-          index
-        )
+        self.offset = offset
+        self.index = index
       def serialize(self, ref_list):
         AST.Text.Item.serialize(self, ref_list)
         self.set('tag_name', element.serialize_str(self.tag_name))
@@ -3593,27 +3465,11 @@ class AST(element.Element):
     self.initial_action_text = initial_action_text
     self.tags = tags
     self.symbols = symbols
-    self.n_productions = (
-      element.deserialize_int(n_productions)
-    if isinstance(n_productions, str) else
-      n_productions
-    )
+    self.n_productions = n_productions
     self.productions = productions
-    self.first_nonterminal = (
-      element.deserialize_int(first_nonterminal)
-    if isinstance(first_nonterminal, str) else
-      first_nonterminal
-    )
-    self.start_nonterminal = (
-      element.deserialize_int(start_nonterminal)
-    if isinstance(start_nonterminal, str) else
-      start_nonterminal
-    )
-    self.associativities = (
-      [element.deserialize_int(i) for i in associativities.split()]
-    if isinstance(associativities, str) else
-      associativities
-    )
+    self.first_nonterminal = first_nonterminal
+    self.start_nonterminal = start_nonterminal
+    self.associativities = associativities
   def serialize(self, ref_list):
     element.Element.serialize(self, ref_list)
     self.set(
index 5a7ae8b..0e3155f 100755 (executable)
@@ -1,21 +1,5 @@
 #!/usr/bin/env python3
 
-# Copyright (C) 2018 Nick Downing <nick@ndcode.org>
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
 import re
 import sys
 
@@ -125,7 +109,7 @@ while len(line):
 {16:s}    text,
 {17:s}    children{18:s}
 {19:s}  )
-'''.format(
+{20:s}'''.format(
           indent,
           params,
           indent,
@@ -159,80 +143,22 @@ while len(line):
                 indent,
                 name
               )
-              for type, name in base_classes[-2][class_name][:i]
+              for _, name in base_classes[-2][class_name][:i]
             ]
           ),
-          indent
+          indent,
+          ''.join(
+            [
+              '{0:s}  self.{1:s} = {2:s}\n'.format(
+                indent,
+                name,
+                name
+              )
+              for _, name in fields
+            ]
+          )
         )
       )
-      for type, name in fields:
-        if type == 'ref' or type == 'list(ref)' or type == 'set(ref)' or type == 'str':
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = {2:s}
-'''.format(indent, name, name)
-          )
-        elif type[:5] == 'list(' and type[-1:] == ')':
-          subtype = type[5:-1]
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    [element.deserialize_{3:s}(i) for i in {4:s}.split()]
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              subtype,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
-        elif type[:4] == 'set(' and type[-1:] == ')':
-          subtype = type[4:-1]
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    set([element.deserialize_{3:s}(i) for i in {4:s}.split()])
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              subtype,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
-        else:
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    element.deserialize_{3:s}({4:s})
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              type,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
       if len(fields):
         sys.stdout.write(
           '''{0:s}def serialize(self, ref_list):