Added shell grammar

This commit is contained in:
Bruce Hill 2021-01-17 20:13:34 -08:00
parent 008db80229
commit 54b5dfba4d
2 changed files with 20 additions and 0 deletions

View File

@ -42,6 +42,7 @@ parens: `(..`) % (\n/parens/string)
string: `"..`" % (`\.) / `'..`' % (`\.)
id: !<`a-z,A-Z,_,0-9 (`a-z,A-Z,_ *`a-z,A-Z,_,0-9)!=(keyword$)
id-char: `a-z,A-Z,_,0-9
var: id
keyword: !"" # No keywords defined by default
word: !<`a-z,A-Z,_,0-9 +`a-z,A-Z !>`0-9,_
|: !<`a-z,A-Z,_,0-9 / !>`a-z,A-Z,_,0-9

19
grammars/shell.bp Normal file
View File

@ -0,0 +1,19 @@
# Syntax definition for some Shell-specific patterns
#
# NOTE: this is *NOT* intended to be a complete definition of the language's
# syntax! Providing a full language grammar is overkill, because the intended
# use case is finding/replacing string patterns. This task does not require a
# full parse tree, and having one makes the task considerably more complicated.
# See the accompanying README.md for more info.
comment: `#..$
string: `"..`" % (`\./subcommand/\n) / `'..`' % \n / "<<" _ @delim=id _$ ..(^delim$)%\n
subcommand: `` .. `` % \n / "$" parens
keyword: |(
"echo" / "read" / "set" / "unset" / "readonly" / "shift" / "export" / "if" / "fi" /
"else" / "while" / "do" / "done" / "for" / "until" / "case" / "esac" / "break" /
"continue" / "exit" / "return" / "trap" / "wait" / "eval" / "exec" / "ulimit" / "umask"
)|
function-def: ^_ ["function"_] id _ `(_`) >(__`{)
function: function-def __ braces
var: `$ (id / braces)