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 %> ]; }