+++ /dev/null
-/* $Id$
- * ----------------------------------------------------------------------
- *
- */
-
-%{
- open Ast
-
-%}
-
-%token Space
-%token Token
-%token Type
-%token <string> Lname
-%token <string> Uname
-%token Separator
-%token Lparen
-%token Rparen
-%token Comma
-%token Colon
-%token <string * int * int> Code
-%token Error
-%token Alt
-%token Loop_plus
-%token Loop_star
-%token Dollar
-%token Lbracket
-%token Rbracket%token Eof
-
-%start text
-%type <Ast.text> text
-
-%%
-
-text:
- declarations rules
- { { text_decls = $1; text_rules = $2; } }
-
-declarations:
- declaration declarations
- { $1 :: $2 }
-| Separator
- { [] }
-
-declaration:
- Token Uname
- { D_token $2 }
-| Token Type Uname
- { D_typed_token $3 }
-
-rules:
- rule rules
- { $1 :: $2 }
-| Separator
- { [] }
-
-rule:
- Lname Lparen formal_arguments Colon branches
- { { rule_name = $1;
- rule_arguments = $3;
- rule_branches = $5;
- }
- }
-
-formal_arguments:
- Rparen
- { [] }
-| Lname comma_formal_arguments
- { $1 :: $2 }
-
-comma_formal_arguments:
- Comma Lname comma_formal_arguments
- { $2 :: $3 }
-| Rparen
- { [] }
-
-branches:
- branch alt_branches
- { $1 :: $2 }
-
-alt_branches:
- Alt branch alt_branches
- { $2 :: $3 }
-|
- { [] }
-
-branch:
- simple_branch
- { $1 }
-| Dollar Code simple_branch
- { { $3 with branch_early_code = $2 } }
-
-simple_branch:
- symbol Dollar Code patterns Code opt_error_handler
- { { branch_selector = $1;
- branch_early_code = ("",0,0);
- branch_binding_code = $3;
- branch_pattern = $4;
- branch_result_code = $5;
- branch_error_code = $6;
- }
- }
-| symbol patterns Code opt_error_handler
- { { branch_selector = $1;
- branch_early_code = ("",0,0);
- branch_binding_code = ("", 0, 0);
- branch_pattern = $2;
- branch_result_code = $3;
- branch_error_code = $4;
- }
- }
-
-patterns:
- pattern patterns
- { $1 :: $2 }
-|
- { [] }
-
-pattern:
- symbol Loop_star
- { { pat_symbol = $1;
- pat_modifier = Repetition;
- }
- }
-| symbol Error
- { { pat_symbol = $1;
- pat_modifier = Option;
- }
- }
-| symbol
- { { pat_symbol = $1;
- pat_modifier = Exact;
- }
- }
-
-symbol:
- Lname Colon Uname
- { U_symbol($3, Some $1) }
-| Lname Colon Lname Lparen actual_arguments
- { L_symbol($3, $5, Some $1) }
-| Lname Colon Lbracket Lname Rbracket Lparen actual_arguments
- { L_indirect($4, $7, Some $1) }
-| Uname
- { U_symbol($1, None) }
-| Lname Lparen actual_arguments
- { L_symbol($1, $3, None) }
-| Lbracket Lname Rbracket Lparen actual_arguments
- { L_indirect($2, $5, None) }
-
-
-actual_arguments:
- Rparen
- { [] }
-| Lname comma_actual_arguments
- { $1 :: $2 }
-
-comma_actual_arguments:
- Rparen
- { [] }
-| Comma Lname comma_actual_arguments
- { $2 :: $3 }
-
-opt_error_handler:
- Error Code
- { Some $2 }
-|
- { None }
-
-%%
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1 2000/11/17 09:57:32 lpadovan
- * Initial revision
- *
- * Revision 1.4 2000/05/09 00:03:22 gerd
- * Added [ ml_name ] symbols, where ml_name is an arbitrary
- * OCaml identifier.
- *
- * Revision 1.3 2000/05/08 22:03:01 gerd
- * It is now possible to have a $ {{ }} sequence right BEFORE
- * the first token. This code is executed just after the first token
- * has been recognized.
- *
- * Revision 1.2 2000/05/06 21:51:46 gerd
- * New Dollar tag.
- *
- * Revision 1.1 2000/05/06 17:36:17 gerd
- * Initial revision.
- *
- *
- *)