From ced5a564240f2fd9b28466ca66fb9de766b85180 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 3 Oct 2022 21:24:13 -0400 Subject: [PATCH] Support global user code blocks --- assets/parser.d.erb | 4 ++++ lib/propane/grammar.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/assets/parser.d.erb b/assets/parser.d.erb index 6ec6be2..70b2b9d 100644 --- a/assets/parser.d.erb +++ b/assets/parser.d.erb @@ -5,6 +5,10 @@ module <%= @grammar.modulename %>; import std.stdio; +<% @grammar.code_blocks.each do |code| %> +<%= code %> +<% end %> + class <%= @classname %> { enum diff --git a/lib/propane/grammar.rb b/lib/propane/grammar.rb index eb24b35..48e1876 100644 --- a/lib/propane/grammar.rb +++ b/lib/propane/grammar.rb @@ -7,11 +7,13 @@ class Propane attr_reader :patterns attr_reader :rules attr_reader :tokens + attr_reader :code_blocks def initialize(input) @patterns = [] @tokens = [] @rules = [] + @code_blocks = [] @line_number = 1 @next_line_number = @line_number @input = input.gsub("\r\n", "\n") @@ -36,6 +38,8 @@ class Propane elsif parse_tokenid_statement! elsif parse_drop_statement! elsif parse_rule_statement! + elsif code = parse_code_block! + @code_blocks << code else if @input.size > 25 @input = @input.slice(0..20) + "..."