Generate the Abstract Syntax Tree (AST) of a Bash command.
npm install stoke> 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:
1. As an exercise in writing a parser based on strict grammar rules
2. As part of a larger project to build a Bash shell from the ground up
``jsecho \'bar baz\'
stoke('echo "foo "');`
/* [
* {
* 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