Class: Sexpr::Parser::Citrus
- Inherits:
-
Object
- Object
- Sexpr::Parser::Citrus
show all
- Includes:
- Sexpr::Parser
- Defined in:
- lib/sexpr/parser/citrus.rb
Class Method Summary
collapse
Instance Method Summary
collapse
factor, find_parser_class, register, registered_parser_classes
Constructor Details
#initialize(parser) ⇒ Citrus
24
25
26
27
|
# File 'lib/sexpr/parser/citrus.rb', line 24
def initialize(parser)
require_relative 'ext'
@parser = parser
end
|
Class Method Details
.looks_a_citrus_file?(arg) ⇒ Boolean
13
14
15
16
|
# File 'lib/sexpr/parser/citrus.rb', line 13
def looks_a_citrus_file?(arg)
arg = arg.to_path if arg.respond_to?(:to_path)
arg.is_a?(String) && File.exist?(arg) && (File.extname(arg) == ".citrus")
end
|
.looks_a_citrus_grammar?(arg) ⇒ Boolean
18
19
20
|
# File 'lib/sexpr/parser/citrus.rb', line 18
def looks_a_citrus_grammar?(arg)
defined?(::Citrus::Grammar) && arg.is_a?(Module) && arg.include?(::Citrus::Grammar)
end
|
.recognizes?(arg) ⇒ Boolean
8
9
10
11
|
# File 'lib/sexpr/parser/citrus.rb', line 8
def recognizes?(arg)
looks_a_citrus_grammar?(arg) or
looks_a_citrus_file?(arg)
end
|
Instance Method Details
#parse(input, options = {}) ⇒ Object
43
44
45
46
47
|
# File 'lib/sexpr/parser/citrus.rb', line 43
def parse(input, options = {})
return input if input.is_a?(::Citrus::Match)
input = input_text(input)
parser.parse(input, options)
end
|
#parser ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/sexpr/parser/citrus.rb', line 29
def parser
@citrus_parser ||= begin
if self.class.looks_a_citrus_grammar?(@parser)
@parser
elsif self.class.looks_a_citrus_file?(@parser)
@parser = @parser.to_path if @parser.respond_to?(:to_path)
@parser = @parser[0...-(".citrus".length)]
::Citrus.load(@parser).last
else
raise UnrecognizedParserError, "Not a citrus parser #{@parser}"
end
end
end
|
#to_sexpr(parsed) ⇒ Object
49
50
51
|
# File 'lib/sexpr/parser/citrus.rb', line 49
def to_sexpr(parsed)
parsed.sexpr
end
|