Module: RailroadDiagrams::DSL
- Included in:
- Builder
- Defined in:
- lib/railroad_diagrams/builder.rb
Overview
Helpers for building node trees with short grammar expressions.
Instance Method Summary collapse
- #alt(first, second) ⇒ Object
- #block(**options) ⇒ Object
- #char_class(text, **options) ⇒ Object
- #choice(*items, default: 0) ⇒ Object
- #comment(text, **options) ⇒ Object
- #diagram(*items, **options) ⇒ Object
- #except(item, excluded, **options) ⇒ Object
- #group(item, label = nil, **options) ⇒ Object
- #hchoice(*items) ⇒ Object
- #list(item, sep: ',', **options) ⇒ Object
- #mchoice(type, *items, default: 0) ⇒ Object
- #nt(text, **options) ⇒ Object (also: #non_terminal)
- #one_or_more(item, sep = nil) ⇒ Object
- #opt(item, skip: false) ⇒ Object
- #oseq(*items) ⇒ Object
- #repeat(item, **options) ⇒ Object
- #seq(*items) ⇒ Object
- #skip ⇒ Object
- #special(text, **options) ⇒ Object
- #stack(*items) ⇒ Object
- #t(text, **options) ⇒ Object (also: #terminal)
- #zero_or_more(item, sep = nil, skip: false) ⇒ Object
Instance Method Details
#alt(first, second) ⇒ Object
120 121 122 |
# File 'lib/railroad_diagrams/builder.rb', line 120 def alt(first, second) AlternatingSequence.new(coerce(first), coerce(second)) end |
#block(**options) ⇒ Object
161 162 163 |
# File 'lib/railroad_diagrams/builder.rb', line 161 def block(**) Block.new(**) end |
#char_class(text, **options) ⇒ Object
167 168 169 |
# File 'lib/railroad_diagrams/builder.rb', line 167 def char_class(text, **) CharClass.new(text.to_s, **) end |
#choice(*items, default: 0) ⇒ Object
78 79 80 |
# File 'lib/railroad_diagrams/builder.rb', line 78 def choice(*items, default: 0) Choice.new(default, *items.map { |item| coerce(item) }) end |
#comment(text, **options) ⇒ Object
60 61 62 |
# File 'lib/railroad_diagrams/builder.rb', line 60 def comment(text, **) Comment.new(text.to_s, **) end |
#diagram(*items, **options) ⇒ Object
40 41 42 |
# File 'lib/railroad_diagrams/builder.rb', line 40 def diagram(*items, **) Diagram.new(*items.map { |item| coerce(item) }, **) end |
#except(item, excluded, **options) ⇒ Object
155 156 157 |
# File 'lib/railroad_diagrams/builder.rb', line 155 def except(item, excluded, **) Except.new(coerce(item), excluded.is_a?(String) ? excluded : coerce(excluded), **) end |
#group(item, label = nil, **options) ⇒ Object
126 127 128 129 130 131 132 |
# File 'lib/railroad_diagrams/builder.rb', line 126 def group(item, label = nil, **) raise InvalidArgument, 'unknown group option' unless (.keys - [:label]).empty? raise InvalidArgument, 'label specified twice' if !label.nil? && .key?(:label) label = [:label] if .key?(:label) Group.new(coerce(item), label: label.is_a?(String) || label.nil? ? label : coerce(label)) end |
#hchoice(*items) ⇒ Object
84 85 86 |
# File 'lib/railroad_diagrams/builder.rb', line 84 def hchoice(*items) HorizontalChoice.new(*items.map { |item| coerce(item) }) end |
#list(item, sep: ',', **options) ⇒ Object
149 150 151 |
# File 'lib/railroad_diagrams/builder.rb', line 149 def list(item, sep: ',', **) SeparatedList.new(coerce(item), coerce(sep), **) end |
#mchoice(type, *items, default: 0) ⇒ Object
90 91 92 |
# File 'lib/railroad_diagrams/builder.rb', line 90 def mchoice(type, *items, default: 0) MultipleChoice.new(default, type.to_s, *items.map { |item| coerce(item) }) end |
#nt(text, **options) ⇒ Object Also known as: non_terminal
53 54 55 |
# File 'lib/railroad_diagrams/builder.rb', line 53 def nt(text, **) NonTerminal.new(text.to_s, **) end |
#one_or_more(item, sep = nil) ⇒ Object
108 109 110 |
# File 'lib/railroad_diagrams/builder.rb', line 108 def one_or_more(item, sep = nil) OneOrMore.new(coerce(item), sep.nil? ? nil : coerce(sep)) end |
#opt(item, skip: false) ⇒ Object
96 97 98 |
# File 'lib/railroad_diagrams/builder.rb', line 96 def opt(item, skip: false) Optional.new(coerce(item), skip: skip) end |
#oseq(*items) ⇒ Object
114 115 116 |
# File 'lib/railroad_diagrams/builder.rb', line 114 def oseq(*items) OptionalSequence.new(*items.map { |item| coerce(item) }) end |
#repeat(item, **options) ⇒ Object
142 143 144 145 |
# File 'lib/railroad_diagrams/builder.rb', line 142 def repeat(item, **) [:separator] = coerce([:separator]) if .key?(:separator) && ![:separator].nil? Repeat.new(coerce(item), **) end |
#seq(*items) ⇒ Object
66 67 68 |
# File 'lib/railroad_diagrams/builder.rb', line 66 def seq(*items) Sequence.new(*items.map { |item| coerce(item) }) end |
#skip ⇒ Object
136 137 138 |
# File 'lib/railroad_diagrams/builder.rb', line 136 def skip Skip.new end |
#special(text, **options) ⇒ Object
173 174 175 |
# File 'lib/railroad_diagrams/builder.rb', line 173 def special(text, **) Special.new(text.to_s, **) end |
#stack(*items) ⇒ Object
72 73 74 |
# File 'lib/railroad_diagrams/builder.rb', line 72 def stack(*items) Stack.new(*items.map { |item| coerce(item) }) end |
#t(text, **options) ⇒ Object Also known as: terminal
46 47 48 |
# File 'lib/railroad_diagrams/builder.rb', line 46 def t(text, **) Terminal.new(text.to_s, **) end |
#zero_or_more(item, sep = nil, skip: false) ⇒ Object
102 103 104 |
# File 'lib/railroad_diagrams/builder.rb', line 102 def zero_or_more(item, sep = nil, skip: false) ZeroOrMore.new(coerce(item), sep.nil? ? nil : coerce(sep), skip: skip) end |