#grammar #language #expression #dot #pest #excellent #underpinning

polka

基于 Rust 的点语言解析器;基于解析表达式语法(PEG),使用优秀的 pest 包作为底层支持

2 个版本

0.1.2 2019年6月25日
0.1.1 2019年6月18日

39 in #dot

MIT 许可证

47KB
1.5K SLoC

Polka

基于 Rust 的 dot 语言解析器;基于 解析表达式语法(PEG),使用优秀的 pest 包作为底层支持。


使用(作为 Rust 库)

  1. 将以下内容添加到您的 Cargo.toml
  [dependencies]
  rand = "0.6"
  1. 通过传递输入 String 来调用 parser 函数
  extern crate polka;
  use polka::parse;

  fn main() {
    let input = "digraph { a -> b -> c }".to_string();
    println!("Polka AST\n: {:?}", parse(input).unwrap());
  }

  // Polka AST: 
  // Graph {
  //     strict: false,
  //     graph_type: Some(
  //         Digraph,
  //     ),
  //     id: None,
  //     statements: [
  //         EdgeStatement(
  //             EdgeStatement {
  //                 edge: NodeId(
  //                     NodeId {
  //                         node_id: "a",
  //                         port: None,
  //                     },
  //                 ),
  //                 edge_rhs_list: [
  //                     EdgeRhs {
  //                         edge_op: Arrow,
  //                         edge: NodeId(
  //                             NodeId {
  //                                 node_id: "b",
  //                                 port: None,
  //                             },
  //                         ),
  //                     },
  //                     EdgeRhs {
  //                         edge_op: Arrow,
  //                         edge: NodeId(
  //                             NodeId {
  //                                 node_id: "c",
  //                                 port: None,
  //                             },
  //                         ),
  //                     },
  //                 ],
  //                 attributes: None,
  //             },
  //         ),
  //     ],
  // }

已知限制

  1. 目前不支持 HTML ids。

许可证

MIT

依赖

~1MB
~11K SLoC