[][src]Crate turtle_syntax

A RDF Turtle parser for Rust based on source-span.

Basic usage

Elements of the Turtle abstract syntax tree (implementing Parsable) are parsed using a Token iterator (a.k.a a lexer). A Lexer can be created from a char iterator (here using utf8_decode::UnsafeDecoder). We can then use the Document::parse function to parse a Turtle document from the lexer.

use turtle_syntax::{Lexer, Document, Parsable};

// Open the file.
let file = std::fs::File::open(filename).unwrap();

// Create a character stream out of it.
let chars = utf8_decode::UnsafeDecoder::new(file.bytes());

// Create a Turtle token stream (lexer).
let mut lexer = Lexer::new(chars, source_span::DEFAULT_METRICS).peekable();

// Parse the Turtle document.
let doc = Document::parse(&mut lexer, Position::default()).unwrap();

Every node of the resulting abstract syntax tree is tagged with its position (span) in the source text using source_span::Loc. This can be used to report eventual syntax error in a human readable way.

match Document::parse(&mut lexer, Position::default()) {
	Ok(doc) => {
		// do something
	},
	Err(e) => {
		let mut err_fmt = Formatter::new();
		err_fmt.add(e.span(), None, Style::Error);
		let formatted = err_fmt.render(buffer.iter(), buffer.span(), &metrics).unwrap();
		println!("parse error: {}\n{}", e, formatted);
	}
}

The above code will have the following kind of output when a syntax error is detected:

parse error: invalid iri `http://www.w3.org/TR/rdf-syntax- grammar`

. |
3 | @prefix ex: <http://example.org/stuff/1.0/> .
4 |
5 | <http://www.w3.org/TR/rdf-syntax- grammar>
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Re-exports

pub use lexer::Lexer;

Modules

lexer

Turtle lexer.

Structs

Document

A Turtle document.

VerbObjects

verb-objects part of a triples declaration.

Enums

Directive

A directive.

Error

Syntax errors.

IriRef

An IRI or compact IRI.

Literal

Literal value.

Numeric

Numerical value.

Object

Object of a triples declaration.

Statement

A statement (directive of triples declaration).

Subject

Subject of a triples declaration.

Tag

String tag.

Verb

Verb (either a or a predicate).

Traits

Parsable

Elements that can be parsed using a lexer.

Type Definitions

BlankNode

A blank node name.

Result

Parsing result.