BNF for bash

D.2 BNF for bash

The following is the syntax of bash 2.0 in Backus-Naur Form (BNF):

  <letter> ::= abcdefghijklmnopqrstuvwxyz  
  ABCDEFGHIJKLMNOPQRSTUVWXYZ  
   
  <digit> ::= 0123456789  
   
  <number> ::= <digit>  
  <number> <digit>  
   
  <word> ::= <letter>  
  <word> <letter>  
  <word> '_'  
   
  <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_element> ::= <word>  
  <assignment_word>  
  <redirection>  
   
  <redirection_list> ::= <redirection>  
  <redirection_list> <redirection>  
   
  <simple_command> ::= <simple_command_element>  
  <simple_command> <simple_command_element>  
   
  <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> ::=  
  <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>  
   
  .XE "BNF (Backus-Naur Form)"  
  .XE "bash" "syntax, BNF form of"  

 



Learning the Bash Shell
Learning the bash Shell: Unix Shell Programming (In a Nutshell (OReilly))
ISBN: 0596009658
EAN: 2147483647
Year: 1998
Pages: 104

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net