Generate token constants and names to top-level parser class

This commit is contained in:
Josh Holtrop 2021-07-06 10:28:35 -04:00
parent 8aec7ec0de
commit 1dcdd87a28

View File

@ -4,6 +4,29 @@ module <%= @grammar.modulename %>;
<% end %>
class <%= classname %>
{
enum
{
<% @grammar.tokens.each_with_index do |token, index| %>
<% if token.name %>
TOKEN_<%= token.c_name %> = <%= index %>,
<% end %>
<% end %>
TOKEN_EOF = <%= TOKEN_EOF %>,
TOKEN_DECODE_ERROR = <%= TOKEN_DECODE_ERROR %>,
TOKEN_DROP = <%= TOKEN_DROP %>,
TOKEN_NONE = <%= TOKEN_NONE %>,
}
static immutable string TokenNames[] = [
<% @grammar.tokens.each_with_index do |token, index| %>
<% if token.name %>
"<%= token.name %>",
<% else %>
null,
<% end %>
<% end %>
];
class Decoder
{
enum
@ -71,29 +94,6 @@ class <%= classname %>
static class Lexer
{
enum
{
<% @grammar.tokens.each_with_index do |token, index| %>
<% if token.name %>
TOKEN_<%= token.c_name %> = <%= index %>,
<% end %>
<% end %>
TOKEN_EOF = <%= TOKEN_EOF %>,
TOKEN_DECODE_ERROR = <%= TOKEN_DECODE_ERROR %>,
TOKEN_DROP = <%= TOKEN_DROP %>,
TOKEN_NONE = <%= TOKEN_NONE %>,
}
static immutable string TokenNames[] = [
<% @grammar.tokens.each_with_index do |token, index| %>
<% if token.name %>
"<%= token.name %>",
<% else %>
null,
<% end %>
<% end %>
];
private struct Transition
{
uint first;