Covfefe
Covfefe 是一个用于由任何(确定的或非确定的)上下文自由文法生成的语言的解析框架。它实现了 Earley 和 CYK 算法。
用法
Xcode 中的 Swift 包依赖关系
- 转到 "文件" > "Swift 包" > "添加包依赖..."
- 将 "https://github.com/palle-k/Covfefe.git" 作为存储库 URL 输入。
- 选择 "版本","升级至下一个主要版本","0.6.1" < "1.0.0"
- 将 Covfefe 添加到您希望的目标中。
Swift 包管理器
此框架可以通过将其作为依赖项添加到 Package.swift
文件中来作为 Swift 包导入。
.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的一些特性(文档见此处)。
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)")