-
-
Save borkdude/98c5d9e2bf598b227e8e643e4271e61e to your computer and use it in GitHub Desktop.
bash.ebnf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <number> ::= #"[0-9]"+ | |
| <word> ::= #"[a-zA-z]"+ | |
| <word_list> ::= <word> | |
| | <word_list> <word> | |
| <assignment_word> ::= <word> '=' <word> | |
| <redirection> ::= '>' <word> | |
| | '<' <word> | |
| | <number> '>' <word> | |
| | <number> '<' <word> | |
| | '>>' <word> | |
| | <number> '>>' <word> | |
| | '<<' <word> | |
| | <number> '<<' <word> | |
| | '<&' <number> | |
| | <number> '<&' <number> | |
| | '>&' <number> | |
| | <number> '>&' <number> | |
| | '<&' <word> | |
| | <number> '<&' <word> | |
| | '>&' <word> | |
| | <number> '>&' <word> | |
| | '<<-' <word> | |
| | <number> '<<-' <word> | |
| | '>&' '-' | |
| | <number> '>&' '-' | |
| | '<&' '-' | |
| | <number> '<&' '-' | |
| | '&>' <word> | |
| | <number> '<>' <word> | |
| | '<>' <word> | |
| | '>|' <word> | |
| | <number> '>|' <word> | |
| <simple_command> ::= (<simple_command_element>)* | |
| <simple_command_element> ::= <word> | |
| | <assignment_word> | |
| | <redirection> | |
| <redirection_list> ::= <redirection> | |
| | <redirection_list> <redirection> | |
| <command> ::= <simple_command> | |
| | <shell_command> | |
| | <shell_command> <redirection_list> | |
| <shell_command> ::= <for_command> | |
| | <case_command> | |
| | 'while' <compound_list> 'do' <compound_list> 'done' | |
| | 'until' <compound_list> 'do' <compound_list> 'done' | |
| | <select_command> | |
| | <if_command> | |
| | <subshell> | |
| | <group_command> | |
| | <function_def> | |
| <for_command> ::= 'for' <word> <newline_list> 'do' <compound_list> 'done' | |
| | 'for' <word> <newline_list> '{' <compound_list> '}' | |
| | 'for' <word> ';' <newline_list> 'do' <compound_list> 'done' | |
| | 'for' <word> ';' <newline_list> '{' <compound_list> '}' | |
| | 'for' <word> <newline_list> 'in' <word_list> <list_terminator> | |
| <newline_list> 'do' <compound_list> 'done' | |
| | 'for' <word> <newline_list> 'in' <word_list> <list_terminator> | |
| <newline_list> '{' <compound_list> '}' | |
| <select_command> ::= 'select' <word> <newline_list> 'do' <list> 'done' | |
| | 'select' <word> <newline_list> '{' <list> '}' | |
| | 'select' <word> ';' <newline_list> 'do' <list> 'done' | |
| | 'select' <word> ';' <newline_list> '{' list '}' | |
| | 'select' <word> <newline_list> 'in' <word_list> | |
| <list_terminator> <newline_list> 'do' <list> 'done' | |
| | 'select' <word> <newline_list> 'in' <word_list> | |
| <list_terminator> <newline_list> '{' <list> '}' | |
| <case_command> ::= 'case' <word> <newline_list> 'in' <newline_list> 'esac' | |
| | 'case' <word> <newline_list> 'in' <case_clause_sequence> | |
| <newline_list> 'esac' | |
| | 'case' <word> <newline_list> 'in' <case_clause> 'esac' | |
| <function_def> ::= <word> '(' ')' <newline_list> <group_command> | |
| | 'function' <word> '(' ')' <newline_list> <group_command> | |
| | 'function' <word> <newline_list> <group_command> | |
| <subshell> ::= '(' <compound_list> ')' | |
| <if_command> ::= 'if' <compound_list> 'then' <compound_list> 'fi' | |
| | 'if' <compound_list> 'then' <compound_list> 'else' <compound_list> 'fi' | |
| | 'if' <compound_list> 'then' <compound_list> <elif_clause> 'fi' | |
| <group_command> ::= '{' <list> '}' | |
| <elif_clause> ::= 'elif' <compound_list> 'then' <compound_list> | |
| | 'elif' <compound_list> 'then' <compound_list> 'else' <compound_list> | |
| | 'elif' <compound_list> 'then' <compound_list> <elif_clause> | |
| <case_clause> ::= <pattern_list> | |
| | <case_clause_sequence> <pattern_list> | |
| <pattern_list> ::= <newline_list> <pattern> ')' <compound_list> | |
| | <newline_list> <pattern> ')' <newline_list> | |
| | <newline_list> '(' <pattern> ')' <compound_list> | |
| | <newline_list> '(' <pattern> ')' <newline_list> | |
| <case_clause_sequence> ::= <pattern_list> ';;' | |
| | <case_clause_sequence> <pattern_list> ';;' | |
| <pattern> ::= <word> | |
| | <pattern> '|' <word> | |
| <list> ::= <newline_list> <list0> | |
| <compound_list> ::= <list> | |
| | <newline_list> <list1> | |
| <list0> ::= <list1> '\n' <newline_list> | |
| | <list1> '&' <newline_list> | |
| | <list1> ';' <newline_list> | |
| <list1> ::= <list1> '&&' <newline_list> <list1> | |
| | <list1> '||' <newline_list> <list1> | |
| | <list1> '&' <newline_list> <list1> | |
| | <list1> ';' <newline_list> <list1> | |
| | <list1> '\n' <newline_list> <list1> | |
| | <pipeline_command> | |
| <list_terminator> ::= '\n' | |
| | ';' | |
| <newline_list> ::= Epsilon | |
| | <newline_list> '\n' | |
| <simple_list> ::= <simple_list1> | |
| | <simple_list1> '&' | |
| | <simple_list1> ';' | |
| <simple_list1> ::= <simple_list1> '&&' <newline_list> <simple_list1> | |
| | <simple_list1> '||' <newline_list> <simple_list1> | |
| | <simple_list1> '&' <simple_list1> | |
| | <simple_list1> ';' <simple_list1> | |
| | <pipeline_command> | |
| <pipeline_command> ::= <pipeline> | |
| | '!' <pipeline> | |
| | <timespec> <pipeline> | |
| | <timespec> '!' <pipeline> | |
| | '!' <timespec> <pipeline> | |
| <pipeline> ::= | |
| <pipeline> '|' <newline_list> <pipeline> | |
| | <command> | |
| <time_opt> ::= '-p' | |
| <timespec> ::= 'time' | |
| | 'time' <time_opt> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment