From 572a04bc12658f0a4159331daa6b3cdcaefe115d Mon Sep 17 00:00:00 2001 From: Roberto Alsina Date: Fri, 2 Aug 2024 17:33:01 -0300 Subject: [PATCH] Parse up to rules level --- src/tartrazine.cr | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/tartrazine.cr b/src/tartrazine.cr index 841cf20..9aa704c 100644 --- a/src/tartrazine.cr +++ b/src/tartrazine.cr @@ -5,7 +5,11 @@ module Tartrazine class State property name : String = "" - property rules = [] of String + property rules = [] of Rule + end + + class Rule + property pattern : Regex = /.*/ end class Lexer @@ -39,8 +43,18 @@ module Tartrazine # Rules contains states 🤷 rules.children.select { |n| n.name == "state" }.each do |node| state = State.new - state.name = node["name"] l.states << state + state.name = node["name"] + # And states contain rules 🤷 + node.children.select { |n| n.name == "rule" }.each do |rule_node| + rule = Rule.new + state.rules << rule + if rule_node["pattern"]? + rule.pattern = /#{rule_node["pattern"]}/ + else + puts "Unknown rule type: #{rule_node}" + end + end end end end @@ -49,7 +63,7 @@ module Tartrazine end end -l = Tartrazine::Lexer.from_xml(File.read("lexers/bash.xml")) +l = Tartrazine::Lexer.from_xml(File.read("lexers/ada.xml")) p! l.config, l.states # Convenience macros to parse XML