title: EBNF grammar to ANTLR3?
body: <p>I have this EBNF grammar for the Jass scripting language.<br/>
  What needs to be done to convert it to work with ANTLR 3.5?<br/>
  Furthermore, are there any sort of tools available to aid me in doing so?
  <br/><br></p>
  
  <pre><code>//----------------------------------------------------------------------
  // Global Declarations
  //----------------------------------------------------------------------
  program  ::= file+
  file     ::= newline? ( declr newline )* func*
  declr    ::= typedef
             | globals
             | native_func
  typedef  ::= 'type' id 'extends' ( 'handle' | id )
  globals  ::= 'globals' newline global_var_list 'endglobals'
  global_var_list
           ::= ( 'constant' type id '=' expr newline | var_declr newline )*
  native_func
           ::= 'constant'? 'native' func_declr
  func_declr
           ::= id 'takes' ( 'nothing' | param_list ) 'returns' ( type | 'nothing' )
  param_list
           ::= type id ( ',' type id )*
  func     ::= 'constant'? 'function' func_declr newline local_var_list statement_list 'endfunction' newline
  
  //----------------------------------------------------------------------
  // Local Declarations
  //----------------------------------------------------------------------
  local_var_list
           ::= ( 'local' var_declr newline )*
  var_declr
           ::= type id ( '=' expr )?
             | type 'array' id
  statement_list
           ::= ( statement newline )*
  statement
           ::= set
             | call
             | ifthenelse
             | loop
             | exitwhen
             | return
             | debug
  set      ::= 'set' id '=' expr
             | 'set' id '[' expr ']' '=' expr
  call     ::= 'call' id '(' args? ')'
  args     ::= expr ( ',' expr )*
  ifthenelse
           ::= 'if' expr 'then' newline statement_list else_clause? 'endif'
  else_clause
           ::= 'else' newline statement_list
             | 'elseif' expr 'then' newline statement_list else_clause?
  loop     ::= 'loop' newline statement_list 'endloop'
  exitwhen ::= 'exitwhen' expr
  return   ::= 'return' expr?
  debug    ::= 'debug' ( set | call | ifthenelse | loop )
  
  //----------------------------------------------------------------------
  // Expressions
  //----------------------------------------------------------------------
  expr     ::= binary_op
             | unary_op
             | func_call
             | array_ref
             | func_ref
             | id
             | const
             | parens
  binary_op
           ::= expr ( [+-*/&gt;&lt;] | '==' | '!=' | '&gt;=' | '&lt;=' | 'and' | 'or' ) expr
  unary_op ::= ( '+' | '-' | 'not' ) expr
  func_call
           ::= id '(' args? ')'
  array_ref
           ::= id '[' expr ']'
  func_ref ::= 'function' id
  const    ::= int_const
             | real_const
             | bool_const
             | string_const
             | 'null'
  int_const
           ::= decimal
             | octal
             | hex
             | fourcc
  decimal  ::= [1-9] [0-9]*
  octal    ::= '0' [0-7]*
  hex      ::= '$' [0-9a-fA-F]+
             | '0' [xX] [0-9a-fA-F]+
  fourcc   ::= '' ' .{4} ' ''
  real_const
           ::= [0-9]+ '.' [0-9]*
             | '.' [0-9]+
  bool_const
           ::= 'true'
             | 'false'
  string_const
           ::= '"' .* '"'
  parens   ::= '(' expr ')'
  
  //----------------------------------------------------------------------
  // Base RegEx
  //----------------------------------------------------------------------
  type     ::= id
             | 'code'
             | 'handle'
             | 'integer'
             | 'real'
             | 'boolean'
             | 'string'
  id       ::= [a-zA-Z] ( [a-zA-Z0-9_]* [a-zA-Z0-9] )?
  newline  ::= '\n'+
  </code></pre>
  
  <p><br/>
  Thanks in advance to any advice offered!</p>