diff --git a/GRAMMAR b/GRAMMAR new file mode 100644 index 0000000000000000000000000000000000000000..dea5b1482d83d20646389c554e75342aa81b0802 --- /dev/null +++ b/GRAMMAR @@ -0,0 +1,63 @@ +good_input: simple_list '\n' + | '\n' + | EOF + +redirection: [NUMBER] '>' WORD + | [NUMBER] '<' WORD + | [NUMBER] '>>' WORD + | [NUMBER] '<<' WORD + | [NUMBER] '<<-' WORD + | [NUMBER] '>&' WORD + | [NUMBER] '<&' WORD + | [NUMBER] '>|' WORD + | [NUMBER] '<>' WORD + +element: WORD + | redirection + + +cmd_prefix: ASSIGMENT_WORD + | redirection + +simple_command: (cmp_prefix)* (element)+ + +command: simple_command + | shell_command (redirection)* + | function_def + +simple_list: and_or ((';'|'&') and_or)* ['&'|';'] + +and_or: pipeline (('&&'|'||') ('\n')* pipeline)* + +pipeline: ['!'] command ('|' ('\n')* command)* + +shell_command: '{' compound_list '}' + | '(' compound_list ')' + | rule_for + | rule_while + | rule_until + | rule_case + | rule_if + +rule_if: 'if' compound_list 'then' compound_list [else_clause] 'fi' + +else_clause: 'else' compound_list + | 'elif' compound_list 'then' compound_list [else_clause] + +rule_for: 'for' WORD ('\n')* ['in' (WORD)+ (';'|'\n') ('\n')*] do_group + +rule_while: 'while' compound_list do_group + +rule_until: 'until' compound_list do_group + +do_group: 'do' compound_list 'done' + +compound_list: ('\n')* and_or ((';'|'&'|'\n') ('\n')* and_or)* [(('&'|';'|'\n') ('\n')*)] + +case: 'case' WORD ('\n')* 'in' ('\n')* [case_clause] 'esac' + +case_clause: pattern (';;' (\n)* pattern)* [;;] + +pattern: ['('] WORD ('|' WORD)* ')' ( ('\n')* | compound_list ) + +function: ['function'] WORD '(' ')' ('\n')* shell_command (redirection)* diff --git a/src/readline/readline.c b/src/readline/readline.c index ffc9eff0463158d1b918c17256ab78dceb3f58d8..b08319e1c6a3e1d5db09e66841e34285b0d82893 100644 --- a/src/readline/readline.c +++ b/src/readline/readline.c @@ -5,7 +5,7 @@ ** Login ** ** Started on Wed Aug 2 01:13:56 2006 Seblu -** Last update Wed Aug 2 17:58:03 2006 Seblu +** Last update Wed Aug 2 20:24:51 2006 Seblu */ #include