Class: ShEx::Parser
- Inherits:
-
Object
- Object
- ShEx::Parser
- Includes:
- EBNF::PEG::Parser, RDF::Util::Logger, Terminals
- Defined in:
- lib/shex/parser.rb
Overview
A parser for the ShEx grammar.
Constant Summary
Constants included from Terminals
Terminals::ATPNAME_LN, Terminals::ATPNAME_NS, Terminals::BLANK_NODE_LABEL, Terminals::CODE, Terminals::DECIMAL, Terminals::DOUBLE, Terminals::ECHAR, Terminals::EXPONENT, Terminals::INTEGER, Terminals::IRIREF, Terminals::IRI_RANGE, Terminals::LANGTAG, Terminals::LANG_STRING_LITERAL1, Terminals::LANG_STRING_LITERAL2, Terminals::LANG_STRING_LITERAL_LONG1, Terminals::LANG_STRING_LITERAL_LONG2, Terminals::PERCENT, Terminals::PLX, Terminals::PNAME_LN, Terminals::PNAME_NS, Terminals::PN_CHARS, Terminals::PN_CHARS_BASE, Terminals::PN_CHARS_BODY, Terminals::PN_CHARS_U, Terminals::PN_LOCAL, Terminals::PN_LOCAL_BODY, Terminals::PN_LOCAL_ESC, Terminals::PN_PREFIX, Terminals::RDF_TYPE, Terminals::REGEXP, Terminals::REPEAT_RANGE, Terminals::STRING_LITERAL1, Terminals::STRING_LITERAL2, Terminals::STRING_LITERAL_LONG1, Terminals::STRING_LITERAL_LONG2, Terminals::UCHAR, Terminals::UCHAR4, Terminals::UCHAR8, Terminals::U_CHARS1, Terminals::U_CHARS2, Terminals::WS
Instance Attribute Summary collapse
-
#input ⇒ String
The current input string being processed.
-
#options ⇒ Hash
readonly
Any additional options for the parser.
-
#result ⇒ Array
The internal representation of the result using hierarchy of RDF objects and ShEx::Operator objects.
Instance Method Summary collapse
-
#initialize(input = nil, **options) {|parser| ... } ⇒ ShEx::Parser
constructor
Initializes a new parser instance.
-
#parse(prod = :shexDoc) ⇒ ShEx::Algebra::Schema
Parse query.
- #peg_parse ⇒ Object
- #to_s ⇒ Object
- #to_sxp_bin ⇒ String
Constructor Details
#initialize(input = nil, **options) {|parser| ... } ⇒ ShEx::Parser
Initializes a new parser instance.
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
# File 'lib/shex/parser.rb', line 851 def initialize(input = nil, **, &block) @input = case input when IO, StringIO then input.read else input.to_s.dup end @input.encode!(Encoding::UTF_8) if @input.respond_to?(:encode!) @options = {anon_base: "b0", validate: false}.merge() debug("base IRI") {base_uri.inspect} debug("validate") {validate?.inspect} if block_given? case block.arity when 0 then instance_eval(&block) else block.call(self) end end end |
Instance Attribute Details
#input ⇒ String
The current input string being processed.
27 28 29 |
# File 'lib/shex/parser.rb', line 27 def input @input end |
#options ⇒ Hash (readonly)
Any additional options for the parser.
21 22 23 |
# File 'lib/shex/parser.rb', line 21 def @options end |
#result ⇒ Array
The internal representation of the result using hierarchy of RDF objects and ShEx::Operator objects.
34 35 36 |
# File 'lib/shex/parser.rb', line 34 def result @result end |
Instance Method Details
#parse(prod = :shexDoc) ⇒ ShEx::Algebra::Schema
Parse query
The result is a SPARQL Algebra S-List. Productions return an array such as the following:
(prefix ((: example/)) (union (bgp (triple ?s ?p ?o)) (graph ?g (bgp (triple ?s ?p ?o)))))
898 899 900 901 902 903 904 905 906 907 908 909 910 |
# File 'lib/shex/parser.rb', line 898 def parse(prod = :shexDoc) @result = peg_parse(@input, prod.to_sym, ShEx::Meta::RULES, whitespace: WS, **@options) # Validate resulting expression @result.validate! if @result && validate? @result rescue EBNF::PEG::Parser::Error, EBNF::LL1::Lexer::Error => e raise ShEx::ParseError, e., e.backtrace end |
#peg_parse ⇒ Object
879 |
# File 'lib/shex/parser.rb', line 879 alias_method :peg_parse, :parse |
#to_s ⇒ Object
875 876 877 |
# File 'lib/shex/parser.rb', line 875 def to_s @result.to_sxp end |
#to_sxp_bin ⇒ String
871 872 873 |
# File 'lib/shex/parser.rb', line 871 def to_sxp_bin @result end |