Covfefe 是一个解析器框架,用于解析由任何(确定性或非确定性)上下文无关文法生成的语言。它实现了 Earley 和 CYK 算法。
可以通过将其作为依赖项添加到 Package.swift
文件中,将此框架作为 Swift Package 导入。
.package(url: "https://github.com/palle-k/Covfefe.git", from: "0.6.1")
或者,也可以通过 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)")
有关更完整的示例,即如何评估语法树,请查看 ExpressionSolver。