From e449c3c866b0c91a0bc34d5cb462c47b5fa43ce1 Mon Sep 17 00:00:00 2001 From: Matthew Hall Date: Sun, 4 Sep 2022 00:34:09 +1200 Subject: Able to interpret Thue --- src/thue/program.cr | 12 ++++++++++-- src/thue/rule.cr | 12 +++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) (limited to 'src/thue') diff --git a/src/thue/program.cr b/src/thue/program.cr index c59780b..f449f5a 100644 --- a/src/thue/program.cr +++ b/src/thue/program.cr @@ -6,8 +6,16 @@ class Thue::Program end def interpret - something = @parser.parse - puts something + rules, state = @parser.parse + + loop do + r = rules.find { |r| r.matches?(state) } + break if r.nil? + + state = state.sub(r.pattern, r.replacement) + end + + puts state end end diff --git a/src/thue/rule.cr b/src/thue/rule.cr index 34c2396..cd45adc 100644 --- a/src/thue/rule.cr +++ b/src/thue/rule.cr @@ -1,14 +1,16 @@ require "./thue.cr" abstract struct Thue::Rule - @pattern : Regex + @regex : Regex - def initialize(pattern : String) - @pattern = Regex.new(pattern) + getter pattern : String + + def initialize(@pattern : String) + @regex = Regex.new(Regex.escape(@pattern)) end def matches?(str : String) : Bool - str.matches?(@pattern) + str.matches?(@regex) end abstract def replacement : String @@ -26,7 +28,7 @@ end struct Thue::InputRule < Thue::Rule def replacement : String - gets + gets || "" end end -- cgit v1.2.1