12 个版本 (5 个重大变更)

6.0.0 2023年6月6日
5.0.4 2023年5月23日
5.0.2 2023年4月11日
5.0.0 2023年2月28日
1.1.0 2020年6月18日

#2554解析器实现

Download history 2/week @ 2024-03-13 6/week @ 2024-03-27 31/week @ 2024-04-03 212/week @ 2024-04-10 11/week @ 2024-04-17

83 每月下载量

MIT/Apache

74KB
2.5K SLoC

Rust 的 RDF 1.1 海龟语法解析器。

CI Crate informations License Documentation

海龟是一种用于 RDF 的文本语法,允许完全以紧凑和自然文本形式编写 RDF 图,具有常用模式和数据类型的缩写。此库为 Rust 提供了一个海龟解析器,使用 locspan 库跟踪每个语法节点的代码映射元数据。

基本用法

海龟抽象语法树(实现 Parsable)的元素使用 Token 迭代器(即词法分析器)进行解析。可以从 char 迭代器创建一个 Lexer。然后,我们可以使用 Document::parse 函数从词法分析器解析一个海龟文档。在以下示例中,我们使用出色的 codespan_reporting 包来报告错误。

use codespan_reporting::diagnostic::{Diagnostic, Label};
use codespan_reporting::files::SimpleFiles;
use codespan_reporting::term::termcolor::{ColorChoice, StandardStream};
use locspan::Meta;
use std::fs::File;
use std::io::Read;
use turtle_syntax::{
  parsing::Parse,
  Document,
};

fn main() -> std::io::Result<()> {
  let mut args = std::env::args();
  args.next();

  let mut files = SimpleFiles::new();

  for filename in args {
    let mut file = File::open(&filename)?;
    let mut buffer = String::new();
    file.read_to_string(&mut buffer)?;
    let file_id = files.add(filename.clone(), buffer);
    let buffer = files.get(file_id).unwrap();

    match Document::parse_str(buffer.source().as_str(), |span| span) {
      Ok(_doc) => {
        // do something
      }
      Err(Meta(e, span)) => {
        let diagnostic = Diagnostic::error()
          .with_message(format!("parse error: {}", e))
          .with_labels(vec![Label::primary(file_id, span)]);

        let writer = StandardStream::stderr(ColorChoice::Auto);
        let config = codespan_reporting::term::Config::default();
        codespan_reporting::term::emit(&mut writer.lock(), &config, &files, &diagnostic)
          .unwrap();
      }
    }
  }

  Ok(())
}

当检测到语法错误时,上述代码将产生以下类型的输出

error: parse error: unexpected character ` `
  ┌─ examples/syntax_error.ttl:5:34
  │
5 │ <http://www.w3.org/TR/rdf-syntax- grammar>
  │                                  ^

许可证

根据以下之一许可:

由您选择。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如 Apache-2.0 许可证中定义,应如上所述双许可,不附加任何额外条款或条件。

依赖关系

~4MB
~94K SLoC