Class: L43Rmap::Parsing::ChunkParser
- Inherits:
-
Object
- Object
- L43Rmap::Parsing::ChunkParser
show all
- Includes:
- L43::SimpleColor, Ast, RgxParsers
- Defined in:
- lib/l43_rmap/parsing/chunk_parser.rb
Constant Summary
collapse
- SyntaxError =
Class.new(RuntimeError)
Constants included
from RgxParsers
RgxParsers::BAREWORD, RgxParsers::BarewordParser, RgxParsers::DQUOTE, RgxParsers::DquoteParser, RgxParsers::ESCAPE, RgxParsers::ESC_DQUOTE, RgxParsers::ESC_SQUOTE, RgxParsers::EscDquoteParser, RgxParsers::EscSquoteParser, RgxParsers::EscapeParser, RgxParsers::INDEXED_FIELD, RgxParsers::INT, RgxParsers::IndexedFieldParser, RgxParsers::IntParser, RgxParsers::LPAR, RgxParsers::LparParser, RgxParsers::NAME, RgxParsers::NAMED_FIELD, RgxParsers::NO_DQUOTE, RgxParsers::NO_META, RgxParsers::NO_SQUOTE, RgxParsers::NameParser, RgxParsers::NamedFieldParser, RgxParsers::NoDquoteParser, RgxParsers::NoMetaParser, RgxParsers::NoSquoteParser, RgxParsers::OP, RgxParsers::OpParser, RgxParsers::RPAR, RgxParsers::RparParser, RgxParsers::SQUOTE, RgxParsers::SYMBOL, RgxParsers::SquoteParser, RgxParsers::SymbolParser, RgxParsers::WS, RgxParsers::WsParser, RgxParsers::ZEROFIELD, RgxParsers::ZEROFIELD_INSIDE, RgxParsers::ZerofieldInsideParser, RgxParsers::ZerofieldParser
Constants included
from Ast
Ast::Node
Instance Method Summary
collapse
Instance Method Details
#parse(input, pos: 1) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/l43_rmap/parsing/chunk_parser.rb', line 25
def parse(input, pos: 1)
input = Input.new(current: input, pos:)
ast = []
loop do
return ast if input.empty?
result = parse_chunk(input)
result => chunk, input
ast = unify_verb(ast << chunk)
end
end
|
#parse_chunk(input) ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/l43_rmap/parsing/chunk_parser.rb', line 39
def parse_chunk(input)
if chunk = ZerofieldParser.parse(input)
chunk
elsif chunk = IndexedFieldParser.parse(input)
chunk
elsif chunk = NoMetaParser.parse(input)
chunk
elsif chunk = EscapeParser.parse(input)
chunk
elsif chunk = NamedFieldParser.parse(input)
chunk
elsif LparParser.parse(input) in _, input
result = parse_sexp(input)
result
else
raise SyntaxError, input.to_h.inspect
end
end
|