12 个版本 (5 个重大变更)
6.0.0 | 2023年6月6日 |
---|---|
5.0.4 | 2023年5月23日 |
5.0.2 | 2023年4月11日 |
5.0.0 |
|
1.1.0 | 2020年6月18日 |
#2554 在 解析器实现
83 每月下载量
74KB
2.5K SLoC
Rust 的 RDF 1.1 海龟语法解析器。
海龟是一种用于 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 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如 Apache-2.0 许可证中定义,应如上所述双许可,不附加任何额外条款或条件。
依赖关系
~4MB
~94K SLoC