diff --git a/unoptimized_lr/simple_lr_automaton.py b/unoptimized_lr/simple_lr_automaton.py index f6107f99f2566f1a409a09738f001df5cde2441b..5d2bd4a5eb99ef68388440bb0a50066c70019342 100644 --- a/unoptimized_lr/simple_lr_automaton.py +++ b/unoptimized_lr/simple_lr_automaton.py @@ -180,7 +180,8 @@ class ParametrizationConstants(): def __init__(self, *, number_of_terminals, number_of_nonterminals, number_of_states, number_of_reduce_rules, length_of_longest_rule_RHS, maximum_number_of_stack_items, - longest_serialized_parse_tree): + longest_serialized_parse_tree, + generating_tree): self.number_of_terminals = number_of_terminals self.number_of_nonterminals = number_of_nonterminals self.number_of_states = number_of_states @@ -188,6 +189,7 @@ class ParametrizationConstants(): self.length_of_longest_rule_RHS = length_of_longest_rule_RHS self.maximum_number_of_stack_items = maximum_number_of_stack_items self.longest_serialized_parse_tree = longest_serialized_parse_tree + self.generating_tree = generating_tree # We calculate the ceil(log_2())'s here all in one go: @@ -215,7 +217,7 @@ class ParametrizationConstants(): class LR_automaton_internal(Layout): def __init__(self, *, parameters): - super().__init__([ + interfaces = [ # TABLES ("ShiftReduce_table_bus"), ("GOTO_table_bus"), @@ -223,20 +225,24 @@ class LR_automaton_internal(Layout): # STACKS ("parse_stack_bus"), - ("index_stack_bus"), - ]) + ] + if(parameters.generating_tree == True): + interfaces.append(("index_stack_bus")) + super().__init__(interfaces) class LR_automaton_external(Layout): def __init__(self, *, parameters): - super().__init__([ + interfaces = [ # INPUT ("input_stream"), # OUTPUTS - ("serialization_bus"), ("sideband_bus") - ]) + ] + if (parameters.generating_tree == True): + interfaces.append(("serialization_bus")) + super().__init__(interfaces) class SimpleLRAutomaton(Elaboratable): def __init__(self, *, lr_tables, parameters):