mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
timew: Renamed grammar files, added rule.grammar
This commit is contained in:
parent
925e8ec14b
commit
78653a16cf
3 changed files with 56 additions and 8 deletions
38
src/rule.grammar
Normal file
38
src/rule.grammar
Normal 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"
|
||||||
|
|
|
@ -50,19 +50,29 @@ int main (int argc, const char** argv)
|
||||||
// TODO Load CLI grammar.
|
// TODO Load CLI grammar.
|
||||||
// TODO Load from string, else file on config override.
|
// TODO Load from string, else file on config override.
|
||||||
// TODO Migrate from loading a grammar from file, to a default string.
|
// TODO Migrate from loading a grammar from file, to a default string.
|
||||||
File file ("./grammar.cfg");
|
File cliFile ("./cli.grammar");
|
||||||
Grammar grammar;
|
Grammar cliGrammar;
|
||||||
grammar.loadFromFile (file);
|
cliGrammar.loadFromFile (cliFile);
|
||||||
std::cout << grammar.dump ();
|
std::cout << cliGrammar.dump ();
|
||||||
|
|
||||||
// Instantiate the parser.
|
// Instantiate the parser.
|
||||||
LR0 lr0;
|
LR0 cliParser;
|
||||||
lr0.createParseTables (grammar);
|
cliParser.createParseTables (cliGrammar);
|
||||||
std::cout << lr0.dump ();
|
std::cout << cliParser.dump ();
|
||||||
|
|
||||||
// TODO Parse CLI.
|
// 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 Load rules.
|
||||||
// TODO Parse rules.
|
// TODO Parse rules.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue