cyk ~main
context-free grammar parser using the CYK algorithm
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
cyk
A context-free grammar parser using the Cocke–Younger–Kasami algorithm.
Installation
Add cyk
to your project with
dub add cyk
Usage
import std.string : split;
import cyk : CYK;
void main() {
// example parsing a function declaration with arbitrary many parameter
string[] rules = `
FunctionDeclaration → ReturnType FunctionName "(" OptionalParameters ")"
ReturnType → Type
Type → IntType | FloatingType | "void" | "string"
IntType → "int" | "long"
FloatingType → "float" | "double"
FunctionName → "foo" | "bar" | "baz"
OptionalParameters → Parameters
OptionalParameters →
Parameters → Type ParameterName | Type ParameterName "," Parameters
ParameterName → "a" | "b" | "c"
`.split("\n");
CYK cyk = new CYK(rules, "FunctionDeclaration");
// check some valid function declarations
// with the method `bool check(string[])`
assert(cyk.check("double foo ( )".split));
assert(cyk.check("string bar ( int a )".split));
assert(cyk.check("void baz ( int a , float b , long c )".split));
// check some invalid function declarations
assert(!cyk.check("double foo ( int )".split));
assert(!cyk.check("string ( int a )".split));
assert(!cyk.check("void baz ( int a float b , long c )".split));
// another simpler example
string[] rules2 = `
A → "a"
B → "b"
Double → A A | B B
Different → A B | B A
Expr → Double ">" Different | Different "<" Double
`.split("\n");
CYK cyk2 = new CYK(rules2, "Expr");
// if all terminals are single chars, you can also use the simpler `bool check(string)` method
assert(cyk2.check("ab<aa"));
assert(!cyk2.check("bb<bb"));
}
- Registered by Jakob Kogler
- ~main released 3 years ago
- jakobkogler/cyk
- MIT
- Copyright © 2021, Jakob Kogler
- Authors:
- Dependencies:
- none
- Versions:
-
1.1.0 2021-Jan-16 1.0.2 2021-Jan-16 1.0.1 2021-Jan-16 1.0.0 2021-Jan-16 ~main 2021-Jan-16 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
0 downloads this month
-
15 downloads total
-
- Score:
- 0.6
- Short URL:
- cyk.dub.pm