Generate the Abstract Syntax Tree (AST) of a Bash command.
- Tokenise a given command based on a subset of Bash’s quoting rules
- Detect malformed commands
- Extensive tests, with 100% coverage
This was written mainly:
- As an exercise in writing a parser based on strict grammar rules
- As part of a larger project to build a Bash shell from the ground up
stoke('echo "foo `echo \'bar baz\'`"');
/* [
* {
* type: 'unquoted',
* body: 'echo'
* },
* {
* type: 'double-quoted',
* body: [
* {
* type: 'unquoted',
* body: 'foo '
* },
* {
* type: 'back-quoted',
* body: [
* {
* type: 'unquoted',
* body: 'echo'
* },
* {
* type: 'single-quoted',
* body: 'bar baz'
* }
* ]
* }
* ]
* }
* ]
*/
Read the tests for more usage examples.
The granularity of the AST is at the token level. Tokenisation is based on a subset of Bash’s quoting rules. This particular subset of the grammar (specified in EBNF) is as follows:
token = unquoted | single-quoted | double-quoted | back-quoted ; unquoted = ? /[^'"` ]+/ ? ; single-quoted = “'” , ? /[^']+/ ? , “'” ; double-quoted = “"” , { unquoted | back-quoted } , “"” ; back-quoted = “`” , { unquoted | single-quoted | double-quoted } , “`” ;
(Currently, Stoke does not support escape sequences. For example, you currently cannot escape a double-quote character when inside a double-quote block.)
Stoke will throw an error if a given command does not conform to the above grammar rules.
See Usage.
Install via npm:
$ npm i --save stoke
- 0.1.0
- Initial release