2017-07-14 19:28:54 +00:00
|
|
|
{
|
|
|
|
"name": "bash",
|
|
|
|
"rules": {
|
|
|
|
"program": {
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
2017-07-14 23:11:35 +00:00
|
|
|
"name": "_terminated_statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
},
|
2017-07-14 23:11:35 +00:00
|
|
|
"_terminated_statement": {
|
2017-07-14 19:28:54 +00:00
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
2017-07-14 23:11:35 +00:00
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "statement"
|
|
|
|
},
|
2017-07-14 19:28:54 +00:00
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
2017-07-14 23:11:35 +00:00
|
|
|
"type": "STRING",
|
|
|
|
"value": ";"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
{
|
2017-07-14 23:11:35 +00:00
|
|
|
"type": "STRING",
|
|
|
|
"value": ";;"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
{
|
2017-07-14 23:11:35 +00:00
|
|
|
"type": "STRING",
|
|
|
|
"value": "\n"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
2017-07-14 23:11:35 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"statement": {
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "command"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "while_statement"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "pipeline"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "list"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"while_statement": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "while"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
2017-07-14 23:11:35 +00:00
|
|
|
"name": "_terminated_statement"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "do_group"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 23:11:35 +00:00
|
|
|
"do_group": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "do"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_terminated_statement"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "done"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"command": {
|
2017-07-14 19:28:54 +00:00
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
2017-07-14 19:43:42 +00:00
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "environment_variable_assignment"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "file_redirect"
|
|
|
|
}
|
|
|
|
]
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "leading_word"
|
|
|
|
},
|
|
|
|
"value": "command_name"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "PATTERN",
|
|
|
|
"value": "\\s+"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
2017-07-14 20:00:41 +00:00
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "word"
|
|
|
|
},
|
|
|
|
"value": "argument"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "expansion"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "operator_expansion"
|
|
|
|
}
|
|
|
|
]
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "BLANK"
|
|
|
|
}
|
|
|
|
]
|
2017-07-14 19:43:42 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
2017-07-14 20:54:05 +00:00
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "file_redirect"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "heredoc_redirect"
|
|
|
|
}
|
|
|
|
]
|
2017-07-14 19:43:42 +00:00
|
|
|
}
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"pipeline": {
|
|
|
|
"type": "PREC_LEFT",
|
2017-07-14 23:11:35 +00:00
|
|
|
"value": 1,
|
2017-07-14 19:28:54 +00:00
|
|
|
"content": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
2017-07-14 23:11:35 +00:00
|
|
|
"name": "statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "|"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "|&"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
2017-07-14 23:11:35 +00:00
|
|
|
"name": "statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"list": {
|
|
|
|
"type": "PREC_LEFT",
|
|
|
|
"value": 0,
|
|
|
|
"content": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
2017-07-14 23:11:35 +00:00
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "&&"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
2017-07-14 23:11:35 +00:00
|
|
|
"value": "||"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2017-07-14 23:11:35 +00:00
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"environment_variable_assignment": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "leading_word"
|
|
|
|
},
|
|
|
|
"value": "variable_name"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "="
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "word"
|
|
|
|
},
|
|
|
|
"value": "argument"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 20:00:41 +00:00
|
|
|
"expansion": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "$"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "word"
|
|
|
|
},
|
|
|
|
"value": "variable_name"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"operator_expansion": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "${"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "leading_word"
|
|
|
|
},
|
|
|
|
"value": "variable_name"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": ":"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": ":?"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "="
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "word"
|
|
|
|
},
|
|
|
|
"value": "argument"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "BLANK"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "}"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 19:43:42 +00:00
|
|
|
"file_redirect": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "file_descriptor"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "BLANK"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "<"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": ">"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "<&"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": ">&"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "file_descriptor"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "RENAME",
|
|
|
|
"content": {
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "word"
|
|
|
|
},
|
|
|
|
"value": "file_name"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 20:54:05 +00:00
|
|
|
"heredoc_redirect": {
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "<<"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "<<-"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "heredoc"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 21:27:13 +00:00
|
|
|
"heredoc": {
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_simple_heredoc"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SEQ",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_beginning"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "REPEAT",
|
|
|
|
"content": {
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "expansion"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "operator_expansion"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_middle"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_end"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2017-07-14 19:43:42 +00:00
|
|
|
"file_descriptor": {
|
|
|
|
"type": "TOKEN",
|
|
|
|
"content": {
|
|
|
|
"type": "PREC",
|
|
|
|
"value": 1,
|
|
|
|
"content": {
|
|
|
|
"type": "PATTERN",
|
|
|
|
"value": "\\d+"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2017-07-14 19:28:54 +00:00
|
|
|
"leading_word": {
|
|
|
|
"type": "PATTERN",
|
2017-07-14 21:39:28 +00:00
|
|
|
"value": "[^\\\\\\s#=|;:{}]+"
|
2017-07-14 19:28:54 +00:00
|
|
|
},
|
|
|
|
"word": {
|
|
|
|
"type": "PATTERN",
|
2017-07-14 23:11:35 +00:00
|
|
|
"value": "[^#\\\\\\s$<>{}&;]+"
|
2017-07-14 21:34:49 +00:00
|
|
|
},
|
|
|
|
"comment": {
|
|
|
|
"type": "PATTERN",
|
|
|
|
"value": "#.*"
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"extras": [
|
2017-07-14 21:34:49 +00:00
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "comment"
|
|
|
|
},
|
2017-07-14 19:28:54 +00:00
|
|
|
{
|
2017-07-14 21:39:28 +00:00
|
|
|
"type": "TOKEN",
|
|
|
|
"content": {
|
|
|
|
"type": "CHOICE",
|
|
|
|
"members": [
|
|
|
|
{
|
|
|
|
"type": "PATTERN",
|
|
|
|
"value": "\\s"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "STRING",
|
|
|
|
"value": "\\\n"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
2017-07-14 19:28:54 +00:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"conflicts": [],
|
2017-07-14 20:54:05 +00:00
|
|
|
"externals": [
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
2017-07-14 21:27:13 +00:00
|
|
|
"name": "_simple_heredoc"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_beginning"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_middle"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "SYMBOL",
|
|
|
|
"name": "_heredoc_end"
|
2017-07-14 20:54:05 +00:00
|
|
|
}
|
|
|
|
],
|
2017-07-14 19:28:54 +00:00
|
|
|
"inline": [
|
2017-07-14 23:11:35 +00:00
|
|
|
"statement"
|
2017-07-14 19:28:54 +00:00
|
|
|
]
|
|
|
|
}
|