/* This file is in the public domain. */ %{ #include "yacc-externs.h" %} %token Action %token Any %token Anyof %token Anyof_char %token Binary %token Char %token Decimal %token Digit %token Eos %token Exit %token Fail %token Hex %token Ident %token Initial %token Lambda %token Octal %token Prefix %token Quote %token State %token String %token Symbol %token Tran %token Trace %% file : lines ; lines : line | lines line ; line : state | tran | initial | prefix | trace | anyof_decl | quote_line | blank_line | error { synx_error(); } '\n' { yyerrok; } ; initial : Initial Ident '\n' { set_initial(); } ; state : State '\n' { unnamed_state(); } | State Ident '\n' { named_state(); } ; tran : Tran { transition(); } fsm_arc opt_action '\n' ; prefix : Prefix Ident '\n' { set_prefix(); } ; trace : Trace Ident '\n' { set_trace(); } | Action Ident '\n' { set_action(); } ; anyof_decl : Anyof Ident { begin_anyof(); } anyof_charset '\n' { end_anyof(); } ; anyof_charset : | anyof_charset Anyof_char { store_anyof_char(); } ; fsm_arc : trigger { store_trigger(); } opt_newstate ; trigger : Any | Anyof Ident { set_anyof_trigger(); } | Binary | Char | Decimal | Digit | Eos | Hex | Lambda | Octal | String { first_string_set(); } opt_second_string { set_string_trigger(); } | Symbol | '!' { set_subexp(); } Ident ; opt_second_string: | '*' String { second_string_set(); } opt_action : Ident { store_action(); } opt_args | '?' Ident { store_condition(); } opt_args | { null_action(); } ; opt_args : | '(' { action_args(); } ; opt_newstate : '-' '>' Ident { store_newstate(); } | '-' '>' Exit { store_exitstate(); } | '-' '>' Fail { store_failstate(); } | { next_newstate(); } ; blank_line : '\n' ; quote_line : Quote { set_lex_copy(); } '\n' ; %%