Swiftpack.co - Package - palle-k/Covfefe

Covfefe

Build Status docs CocoaPods CocoaPods license

Covfefe is a parser generator framework for languages generated by any (deterministic or nondeterministic) context free grammar. It uses the Earley or CYK algorithm.

Usage

Swift Package Manager

This framework can be imported as a Swift Package by adding it as a dependency to the Package.swift file:

Swift 4.1

.package(url: "https://github.com/palle-k/Covfefe.git", majorVersion: 0, minor: 4)

Swift 4.0

.package(url: "https://github.com/palle-k/Covfefe.git", majorVersion: 0, minor: 3)

CocoaPods

Alternatively, it can be added as a dependency via CocoaPods (iOS, tvOS, watchOS and macOS).

Swift 4.1

target 'Your-App-Name' do
  use_frameworks!
  pod 'Covfefe'
end

Swift 4.0

target 'Your-App-Name' do
use_frameworks!
pod 'Covfefe', '0.3.7'
end

Some grammar features are not available when using Swift 4.0 (Grouping, Repetitions, Optional Sequences and Character Ranges)

To add this framework manually:

  1. git clone https://github.com/palle-k/Covfefe.git
  2. cd Covfefe
  3. swift package generate-xcodeproj
  4. Drag the generated project file into your project
  5. Add Covfefe.framework in the Embedded Binaries section of your project settings

Example

Grammars can be specified in a language that is a superset of BNF, which adopts some features of EBNF (documented here):

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(bnfString: grammarString, start: "expression")

This grammar describes simple mathematical expressions consisting of unary and binary operations and parentheses. A syntax tree can be generated, which describes how a given word was derived from the grammar above:

let parser = EarleyParser(grammar: grammar)

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

Example Syntax Tree

Github

link
Stars: 15
Help us keep the lights on

Dependencies

Used By

Total: 1