diff options
Diffstat (limited to 'awkreg-grammar.txt')
-rw-r--r-- | awkreg-grammar.txt | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/awkreg-grammar.txt b/awkreg-grammar.txt new file mode 100644 index 0000000..af6984b --- /dev/null +++ b/awkreg-grammar.txt @@ -0,0 +1,69 @@ +####################### +# Original LR grammar # +####################### + +S -> <^> R <$> + +R -> R|R + -> R+ + -> R? + -> R* + -> R R + -> R{num<,<num>>} + -> R{<,num>} + -> (R) + -> bracket + -> rchar + +bracket -> [<^> <bchar / range / class >*] + +bchar -> any character but [ or - + -> \] + -> \- + -> \^ + -> \\ + +range -> bchar - bchar + +class -> [:alpha:] / [:digit:] / ... et cetera + +rchar -> any character but ( ) [ ] { } * ? + + -> \ char + +char -> any character + +################# +# Left-factored # +################# + +R -> T # regex is a single term + -> T R # a term followed by a regex + -> T | R # a term or regex + -> # empty + +T -> F # a regex term is a factor + -> F * + -> F ? + -> F + + -> F {num<,<num>>} + +F -> rchar # a factor is a regex char + -> bracket # [...] expression + -> (R) # parenthesized regex + +bracket -> [<^> <bchar / range / class >*] + +bchar -> any character but [ or - + -> \] + -> \- + -> \^ + -> \\ + +range -> bchar - bchar + +class -> [:alpha:] / [:digit:] / ... et cetera + +rchar -> any character but ( ) [ ] { } * ? + + -> \ char + +char -> any character |