diff --git a/src/tartrazine.cr b/src/tartrazine.cr
index 9aa704c..8b2b314 100644
--- a/src/tartrazine.cr
+++ b/src/tartrazine.cr
@@ -9,7 +9,23 @@ module Tartrazine
end
class Rule
- property pattern : Regex = /.*/
+ property pattern : Regex? = nil
+ end
+
+ # This rule includes another state
+ # I have no idea what thet MEANS yet but in the XML
+ # it's this:
+ #
+ #
+ #
+ #
+ #
+ #
+ #
+ # ...
+
+ class IncludeState < Rule
+ property include : String = ""
end
class Lexer
@@ -47,9 +63,9 @@ module Tartrazine
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 = Rule.new
+ state.rules << rule
rule.pattern = /#{rule_node["pattern"]}/
else
puts "Unknown rule type: #{rule_node}"
@@ -63,8 +79,8 @@ module Tartrazine
end
end
-l = Tartrazine::Lexer.from_xml(File.read("lexers/ada.xml"))
-p! l.config, l.states
+l = Tartrazine::Lexer.from_xml(File.read("lexers/solidity.xml"))
+# p! l.config, l.states
# Convenience macros to parse XML
macro xml_to_s(node, name)