Covfefe

Build Status docs CocoaPods CocoaPods license

Covfefe 是一个解析器框架,用于解析由任何(确定性或非确定性)上下文无关文法生成的语言。它实现了 EarleyCYK 算法。

用法

Xcode 中的 Swift Package 依赖

  1. 前往 “File” > “Swift Packages” > “Add Package Dependency...”
  2. 输入 “https://github.com/palle-k/Covfefe.git” 作为仓库 URL。
  3. 选择 “Version”、“Up to next major”、“0.6.1” < “1.0.0”
  4. 将 Covfefe 添加到你期望的目标中。

Swift Package Manager

可以通过将其作为依赖项添加到 Package.swift 文件中,将此框架作为 Swift Package 导入。

.package(url: "https://github.com/palle-k/Covfefe.git", from: "0.6.1")

CocoaPods

或者,也可以通过 CocoaPods 添加为依赖项 (iOS, tvOS, watchOS 和 macOS)。

target 'Your-App-Name' do
  use_frameworks!
  pod 'Covfefe', '~> 0.6.1'
end

示例

可以使用 EBNF 的超集或 BNF 的超集来指定文法,后者采用了一些 EBNF 的特性(文档 在此 中)。或者,也支持 ABNF。

let grammarString = """
expression       = binary-operation | brackets | unary-operation | number | variable;
brackets         = '(', expression, ')';
binary-operation = expression, binary-operator, expression;
binary-operator  = '+' | '-' | '*' | '/';
unary-operation  = unary-operator, expression;
unary-operator   = '+' | '-';
number           = {digit};
digit            = '0' ... '9';
variable         = {letter};
letter           = 'A' ... 'Z' | 'a' ... 'z';
""" 
let grammar = try Grammar(ebnf: grammarString, start: "expression")

此文法描述了由一元和二元运算以及括号组成的简单数学表达式。可以生成一个语法树,用于描述给定的单词是如何从上述文法中派生出来的。

let parser = EarleyParser(grammar: grammar)

let syntaxTree = try parser.syntaxTree(for: "(a+b)*(-c)")

Example Syntax Tree

有关更完整的示例,即如何评估语法树,请查看 ExpressionSolver