From 10a8ef5eb4a03b1506adf77647761e728034ece5 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 26 Jun 2021 15:58:36 -0400 Subject: [PATCH] Update generated lexer state and transition tables --- assets/parser.d.erb | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/assets/parser.d.erb b/assets/parser.d.erb index 3e5ca79..a376f1c 100644 --- a/assets/parser.d.erb +++ b/assets/parser.d.erb @@ -20,23 +20,21 @@ class <%= classname %> private struct LexerState { - Transition[] transitions; - size_t accepts; + uint transition_table_index; + uint n_transitions; + uint accepts; } +<% transition_table, state_table = lexer_dfa.build_tables %> + private static const Transition transitions[] = [ +<% transition_table.each do |transition_table_entry| %> + Transition(<%= transition_table_entry[:first] %>, <%= transition_table_entry[:last] %>, <%= transition_table_entry[:destination] %>), +<% end %> + ]; + private static const LexerState lexer_states[] = [ -<% lexer_dfa.enumerate.each do |state, index| %> - LexerState([ -<% state.transitions.each do |transition| %> - Transition(<%= transition.code_point_range.first %>, <%= transition.code_point_range.last %>, <%= lexer_dfa.enumerate[transition.destination] %>), -<% end %> - ], -<% if state.accepts %> - <%= state.accepts.id %>, -<% else %> - cast(size_t)-1, -<% end %> - ), +<% state_table.each do |state_table_entry| %> + LexerState(<%= state_table_entry[:transition_table_index] %>, <%= state_table_entry[:n_transitions] %>, <%= state_table_entry[:accepts] %>), <% end %> ]; }