timew: Renamed grammar files, added rule.grammar

This commit is contained in:
Paul Beckingham 2015-12-23 11:50:50 -05:00
parent 925e8ec14b
commit 78653a16cf
3 changed files with 56 additions and 8 deletions

38
src/rule.grammar Normal file
View file

@ -0,0 +1,38 @@
# Timewarrior grammar definition.
# Conventions:
# - Literals are always double-quoted.
# - "*", "+" and "?" suffixes have POSIX semantics.
# - "є" means empty set.
# - Lower-level primitives are barewords.
# - Literal modifiers:
# - :a Accept abbreviations
# - :i Accept caseless match
# - Blank line between rules.
# Left associative:
# A -> A <op> B
# B
#
# Right associative:
# A -> B <op> A
# B
rule:
config_rule
exclusion_rule
event_rule
tag_rule
config_rule:
"define" "configuration"
exclusion_rule:
"define" "exclusions"
event_rule:
"define" "rule"
tag_rule:
"define" "tag"

View file

@ -50,19 +50,29 @@ int main (int argc, const char** argv)
// TODO Load CLI grammar.
// TODO Load from string, else file on config override.
// TODO Migrate from loading a grammar from file, to a default string.
File file ("./grammar.cfg");
Grammar grammar;
grammar.loadFromFile (file);
std::cout << grammar.dump ();
File cliFile ("./cli.grammar");
Grammar cliGrammar;
cliGrammar.loadFromFile (cliFile);
std::cout << cliGrammar.dump ();
// Instantiate the parser.
LR0 lr0;
lr0.createParseTables (grammar);
std::cout << lr0.dump ();
LR0 cliParser;
cliParser.createParseTables (cliGrammar);
std::cout << cliParser.dump ();
// TODO Parse CLI.
// TODO Load rules grammar.
// TODO Load rule grammar.
File ruleFile ("./rule.grammar");
Grammar ruleGrammar;
ruleGrammar.loadFromFile (ruleFile);
std::cout << ruleGrammar.dump ();
// Instantiate the parser.
LR0 ruleParser;
ruleParser.createParseTables (ruleGrammar);
std::cout << ruleParser.dump ();
// TODO Load rules.
// TODO Parse rules.