diff --git a/lib/lrama/diagram.rb b/lib/lrama/diagram.rb index 28679f55..304597a0 100644 --- a/lib/lrama/diagram.rb +++ b/lib/lrama/diagram.rb @@ -77,7 +77,7 @@ def template_file end def add_diagram(name, diagram, result) - result << "\n

#{RailroadDiagrams.escape_html(name)}

" + result << "\n

#{RailroadDiagrams.escape_html(name)}

" diagram.write_svg(result.method(:<<)) result << "\n" end diff --git a/sample/diagram.html b/sample/diagram.html index 9e86cf6d..0eac7449 100644 --- a/sample/diagram.html +++ b/sample/diagram.html @@ -1,11 +1,14 @@ - + Lrama syntax diagrams - - + -

$accept

programEND_OF_INPUT - -

$@1

- -

option_terms

terms - -

compstmt_top_stmts

top_stmtsoption_terms - -

program

$@1compstmt_top_stmts - -

top_stmts

nonetop_stmttop_stmtstermstop_stmt - -

top_stmt

stmtkeyword_BEGINbegin_block - -

block_open

'{' - -

begin_block

block_opencompstmt_top_stmts'}' - -

compstmt_stmts

stmtsoption_terms - -

$@2

- -

$@3

- -

bodystmt

compstmt_stmtslex_ctxtopt_rescuek_else$@2compstmt_stmts$@3opt_ensurecompstmt_stmtslex_ctxtopt_rescue$@4opt_ensure - -

$@4

- -

stmts

nonestmt_or_beginstmtstermsstmt_or_begin - -

stmt_or_begin

stmtkeyword_BEGIN$@5begin_block - -

$@5

- -

allow_exits

- -

k_END

keyword_ENDlex_ctxt - -

$@6

- -

stmt

keyword_aliasfitem$@6fitemkeyword_aliastGVARtGVARkeyword_aliastGVARtBACK_REFkeyword_aliastGVARtNTH_REFkeyword_undefundef_liststmtmodifier_ifexpr_valuestmtmodifier_unlessexpr_valuestmtmodifier_whileexpr_valuestmtmodifier_untilexpr_valuestmtmodifier_rescueafter_rescuestmtk_ENDallow_exits'{'compstmt_stmts'}'command_asgnmlhs'='lex_ctxtcommand_call_valueasgn_lhs_mrhsmlhs'='lex_ctxtmrhs_argmodifier_rescueafter_rescuestmtmlhs'='lex_ctxtmrhs_argexprYYerror - -

asgn_lhs_mrhs

lhs'='lex_ctxtmrhs - -

asgn_lhs_command_rhs

lhs'='lex_ctxtcommand_rhs - -

command_asgn

asgn_lhs_command_rhsop_asgn_command_rhsdef_endless_method_endless_command - -

op_asgn_command_rhs

var_lhstOP_ASGNlex_ctxtcommand_rhsprimary_value'['opt_call_argsrbrackettOP_ASGNlex_ctxtcommand_rhsprimary_valuecall_optIDENTIFIERtOP_ASGNlex_ctxtcommand_rhsprimary_valuecall_optCONSTANTtOP_ASGNlex_ctxtcommand_rhsprimary_valuetCOLON2tIDENTIFIERtOP_ASGNlex_ctxtcommand_rhsprimary_valuetCOLON2tCONSTANTtOP_ASGNlex_ctxtcommand_rhsbackreftOP_ASGNlex_ctxtcommand_rhs - -

def_endless_method_endless_command

defn_headf_opt_paren_args'='endless_commanddefs_headf_opt_paren_args'='endless_command - -

endless_command

commandendless_commandmodifier_rescueafter_rescueargkeyword_notoption_'\n'endless_command - -

option_'\n'

'\n' - -

command_rhs

command_call_valuecommand_call_valuemodifier_rescueafter_rescuestmtcommand_asgn - -

expr

command_callexprkeyword_andexprexprkeyword_orexprkeyword_notoption_'\n'expr'!'command_callargtASSOC$@7p_in_kwargp_pvtblp_pktblp_top_expr_bodyargkeyword_in$@8p_in_kwargp_pvtblp_pktblp_top_expr_bodyarg - -

$@7

- -

$@8

- -

def_name

fname - -

defn_head

k_defdef_name - -

$@9

- -

defs_head

k_defsingletondot_or_colon$@9def_name - -

value_expr_expr

expr - -

expr_value

value_expr_exprYYerror - -

$@10

- -

$@11

- -

expr_value_do

$@10expr_valuedo$@11 - -

command_call

commandblock_command - -

value_expr_command_call

command_call - -

command_call_value

value_expr_command_call - -

block_command

block_callblock_callcall_op2operation2command_args - -

cmd_brace_block

tLBRACE_ARGbrace_body'}' - -

fcall

operation - -

command

fcallcommand_argsfcallcommand_argscmd_brace_blockprimary_valuecall_opoperation2command_argsprimary_valuecall_opoperation2command_argscmd_brace_blockprimary_valuetCOLON2operation2command_argsprimary_valuetCOLON2operation2command_argscmd_brace_blockprimary_valuetCOLON2tCONSTANT'{'brace_body'}'keyword_supercommand_argsk_yieldcommand_argsk_returncall_argskeyword_breakcall_argskeyword_nextcall_args - -

mlhs

mlhs_basictLPARENmlhs_innerrparen - -

mlhs_inner

mlhs_basictLPARENmlhs_innerrparen - -

mlhs_basic

mlhs_headmlhs_headmlhs_itemmlhs_headtSTARmlhs_nodemlhs_headtSTARmlhs_node','mlhs_postmlhs_headtSTARmlhs_headtSTAR','mlhs_posttSTARmlhs_nodetSTARmlhs_node','mlhs_posttSTARtSTAR','mlhs_post - -

mlhs_item

mlhs_nodetLPARENmlhs_innerrparen - -

mlhs_head

mlhs_item','mlhs_headmlhs_item',' - -

mlhs_post

mlhs_itemmlhs_post','mlhs_item - -

mlhs_node

user_variablekeyword_variableprimary_value'['opt_call_argsrbracketprimary_valuecall_optIDENTIFIERprimary_valuecall_optCONSTANTprimary_valuetCOLON2tIDENTIFIERprimary_valuetCOLON2tCONSTANTtCOLON3tCONSTANTbackref - -

lhs

user_variablekeyword_variableprimary_value'['opt_call_argsrbracketprimary_valuecall_optIDENTIFIERprimary_valuetCOLON2tIDENTIFIERprimary_valuecall_optCONSTANTprimary_valuetCOLON2tCONSTANTtCOLON3tCONSTANTbackref - -

cname

tIDENTIFIERtCONSTANT - -

cpath

tCOLON3cnamecnameprimary_valuetCOLON2cname - -

fname

tIDENTIFIERtCONSTANTtFIDopreswords - -

fitem

fnamesymbol - -

undef_list

fitemundef_list','$@12fitem - -

$@12

- -

op

'|''^''&'tCMPtEQtEQQtMATCHtNMATCH'>'tGEQ'<'tLEQtNEQtLSHFTtRSHFT'+''-''*'tSTAR'/''%'tPOWtDSTAR'!''~'tUPLUStUMINUStAREFtASET'`' - -

reswords

keyword__LINE__keyword__FILE__keyword__ENCODING__keyword_BEGINkeyword_ENDkeyword_aliaskeyword_andkeyword_beginkeyword_breakkeyword_casekeyword_classkeyword_defkeyword_definedkeyword_dokeyword_elsekeyword_elsifkeyword_endkeyword_ensurekeyword_falsekeyword_forkeyword_inkeyword_modulekeyword_nextkeyword_nilkeyword_notkeyword_orkeyword_redokeyword_rescuekeyword_retrykeyword_returnkeyword_selfkeyword_superkeyword_thenkeyword_truekeyword_undefkeyword_whenkeyword_yieldkeyword_ifkeyword_unlesskeyword_whilekeyword_until - -

asgn_lhs_arg_rhs

lhs'='lex_ctxtarg_rhs - -

arg

asgn_lhs_arg_rhsop_asgn_arg_rhstCOLON3tCONSTANTtOP_ASGNlex_ctxtarg_rhsargtDOT2argargtDOT3argargtDOT2argtDOT3tBDOT2argtBDOT3argarg'+'argarg'-'argarg'*'argarg'/'argarg'%'argargtPOWargtUMINUS_NUMsimple_numerictPOWargtUPLUSargtUMINUSargarg'|'argarg'^'argarg'&'argargtCMPargrel_exprargtEQargargtEQQargargtNEQargargtMATCHargargtNMATCHarg'!'arg'~'argargtLSHFTargargtRSHFTargargtANDOPargargtOROPargkeyword_definedoption_'\n'begin_definedargarg'?'argoption_'\n'':'argdef_endless_method_endless_argprimary - -

op_asgn_arg_rhs

var_lhstOP_ASGNlex_ctxtarg_rhsprimary_value'['opt_call_argsrbrackettOP_ASGNlex_ctxtarg_rhsprimary_valuecall_optIDENTIFIERtOP_ASGNlex_ctxtarg_rhsprimary_valuecall_optCONSTANTtOP_ASGNlex_ctxtarg_rhsprimary_valuetCOLON2tIDENTIFIERtOP_ASGNlex_ctxtarg_rhsprimary_valuetCOLON2tCONSTANTtOP_ASGNlex_ctxtarg_rhsbackreftOP_ASGNlex_ctxtarg_rhs - -

def_endless_method_endless_arg

defn_headf_opt_paren_args'='endless_argdefs_headf_opt_paren_args'='endless_arg - -

endless_arg

argendless_argmodifier_rescueafter_rescueargkeyword_notoption_'\n'endless_arg - -

relop

'>''<'tGEQtLEQ - -

rel_expr

argrelopargrel_exprreloparg - -

lex_ctxt

none - -

begin_defined

lex_ctxt - -

after_rescue

lex_ctxt - -

value_expr_arg

arg - -

arg_value

value_expr_arg - -

aref_args

noneargstrailerargs','assocstrailerassocstrailer - -

arg_rhs

argargmodifier_rescueafter_rescuearg - -

paren_args

'('opt_call_argsrparen'('args','args_forwardrparen'('args_forwardrparen - -

opt_paren_args

noneparen_args - -

opt_call_args

nonecall_argsargs','args','assocs','assocs',' - -

value_expr_command

command - -

call_args

value_expr_commandargsopt_block_argassocsopt_block_argargs','assocsopt_block_argblock_arg - -

$@13

- -

command_args

$@13call_args - -

block_arg

tAMPERarg_valuetAMPER - -

opt_block_arg

','block_argnone - -

args

arg_valuearg_splatargs','arg_valueargs','arg_splat - -

arg_splat

tSTARarg_valuetSTAR - -

mrhs_arg

mrhsarg_value - -

mrhs

args','arg_valueargs','tSTARarg_valuetSTARarg_value - -

primary

literalstringsxstringregexpwordsqwordssymbolsqsymbolsvar_refbackreftFIDk_begin$@14bodystmtk_endtLPAREN_ARGcompstmt_stmts$@15')'tLPARENcompstmt_stmts')'primary_valuetCOLON2tCONSTANTtCOLON3tCONSTANTtLBRACKaref_args']'tLBRACEassoc_list'}'k_returnk_yield'('call_argsrparenk_yield'('rparenk_yieldkeyword_definedoption_'\n''('begin_definedexprrparenkeyword_not'('exprrparenkeyword_not'('rparenfcallbrace_blockmethod_callmethod_callbrace_blocklambdak_ifexpr_valuethencompstmt_stmtsif_tailk_endk_unlessexpr_valuethencompstmt_stmtsopt_elsek_endk_whileexpr_value_docompstmt_stmtsk_endk_untilexpr_value_docompstmt_stmtsk_endk_caseexpr_valueoption_terms@16case_bodyk_endk_caseoption_terms@17case_bodyk_endk_caseexpr_valueoption_termsp_case_bodyk_endk_forfor_varkeyword_in$@18expr_valuedo$@19compstmt_stmtsk_endk_classcpathsuperclass$@20bodystmtk_endk_classtLSHFTexpr_value$@21termbodystmtk_endk_modulecpath$@22bodystmtk_enddefn_headf_arglist$@23bodystmtk_enddefs_headf_arglist$@24bodystmtk_endkeyword_breakkeyword_nextkeyword_redokeyword_retry - -

$@14

- -

$@15

- -

@16

- -

@17

- -

$@18

- -

$@19

- -

$@20

- -

$@21

- -

$@22

- -

$@23

- -

$@24

- -

value_expr_primary

primary - -

primary_value

value_expr_primary - -

k_begin

keyword_begin - -

k_if

keyword_if - -

k_unless

keyword_unless - -

k_while

keyword_whileallow_exits - -

k_until

keyword_untilallow_exits - -

k_case

keyword_case - -

k_for

keyword_forallow_exits - -

k_class

keyword_class - -

k_module

keyword_module - -

k_def

keyword_def - -

k_do

keyword_do - -

k_do_block

keyword_do_block - -

k_rescue

keyword_rescue - -

k_ensure

keyword_ensure - -

k_when

keyword_when - -

k_else

keyword_else - -

k_elsif

keyword_elsif - -

k_end

keyword_endtDUMNY_END - -

k_return

keyword_return - -

k_yield

keyword_yield - -

then

termkeyword_thentermkeyword_then - -

do

termkeyword_do_cond - -

if_tail

opt_elsek_elsifexpr_valuethencompstmt_stmtsif_tail - -

opt_else

nonek_elsecompstmt_stmts - -

for_var

lhsmlhs - -

f_marg

f_norm_argtLPARENf_margsrparen - -

f_marg_list

f_margf_marg_list','f_marg - -

f_margs

f_marg_listf_marg_list','f_rest_margf_marg_list','f_rest_marg','f_marg_listf_rest_margf_rest_marg','f_marg_list - -

f_rest_marg

tSTARf_norm_argtSTAR - -

f_any_kwrest

f_kwrestf_no_kwarg - -

$@25

- -

f_eq

$@25'=' - -

f_kw_primary_value

f_labelprimary_valuef_label - -

f_kwarg_primary_value

f_kw_primary_valuef_kwarg_primary_value','f_kw_primary_value - -

block_args_tail

f_kwarg_primary_value','f_kwrestopt_f_block_argf_kwarg_primary_valueopt_f_block_argf_any_kwrestopt_f_block_argf_block_arg - -

excessed_comma

',' - -

f_opt_primary_value

f_arg_asgnf_eqprimary_value - -

f_optarg_primary_value

f_opt_primary_valuef_optarg_primary_value','f_opt_primary_value - -

opt_args_tail_block_args_tail

','block_args_tail - -

block_param

f_arg','f_optarg_primary_value','f_rest_argopt_args_tail_block_args_tailf_arg','f_optarg_primary_value','f_rest_arg','f_argopt_args_tail_block_args_tailf_arg','f_optarg_primary_valueopt_args_tail_block_args_tailf_arg','f_optarg_primary_value','f_argopt_args_tail_block_args_tailf_arg','f_rest_argopt_args_tail_block_args_tailf_argexcessed_commaf_arg','f_rest_arg','f_argopt_args_tail_block_args_tailf_argopt_args_tail_block_args_tailf_optarg_primary_value','f_rest_argopt_args_tail_block_args_tailf_optarg_primary_value','f_rest_arg','f_argopt_args_tail_block_args_tailf_optarg_primary_valueopt_args_tail_block_args_tailf_optarg_primary_value','f_argopt_args_tail_block_args_tailf_rest_argopt_args_tail_block_args_tailf_rest_arg','f_argopt_args_tail_block_args_tailblock_args_tail - -

opt_block_param

noneblock_param_def - -

block_param_def

'|'opt_bv_decl'|''|'block_paramopt_bv_decl'|' - -

opt_bv_decl

option_'\n'option_'\n'';'bv_declsoption_'\n' - -

bv_decls

bvarbv_decls','bvar - -

bvar

tIDENTIFIERf_bad_arg - -

max_numparam

- -

numparam

- -

it_id

- -

@26

- -

$@27

- -

lambda

tLAMBDA@26max_numparamnumparamit_idallow_exitsf_larglist$@27lambda_body - -

f_larglist

'('f_argsopt_bv_decl')'f_args - -

lambda_body

tLAMBEGcompstmt_stmts'}'keyword_do_LAMBDA$@28bodystmtk_end - -

$@28

- -

do_block

k_do_blockdo_bodyk_end - -

block_call

commanddo_blockblock_callcall_op2operation2opt_paren_argsblock_callcall_op2operation2opt_paren_argsbrace_blockblock_callcall_op2operation2command_argsdo_block - -

method_call

fcallparen_argsprimary_valuecall_opoperation2opt_paren_argsprimary_valuetCOLON2operation2paren_argsprimary_valuetCOLON2operation3primary_valuecall_opparen_argsprimary_valuetCOLON2paren_argskeyword_superparen_argskeyword_superprimary_value'['opt_call_argsrbracket - -

brace_block

'{'brace_body'}'k_dodo_bodyk_end - -

@29

- -

brace_body

@29max_numparamnumparamit_idallow_exitsopt_block_paramcompstmt_stmts - -

@30

- -

do_body

@30max_numparamnumparamit_idallow_exitsopt_block_parambodystmt - -

case_args

arg_valuetSTARarg_valuecase_args','arg_valuecase_args','tSTARarg_value - -

case_body

k_whencase_argsthencompstmt_stmtscases - -

cases

opt_elsecase_body - -

p_pvtbl

- -

p_pktbl

- -

p_in_kwarg

- -

$@31

- -

p_case_body

keyword_inp_in_kwargp_pvtblp_pktblp_top_exprthen$@31compstmt_stmtsp_cases - -

p_cases

opt_elsep_case_body - -

p_top_expr

p_top_expr_bodyp_top_expr_bodymodifier_ifexpr_valuep_top_expr_bodymodifier_unlessexpr_value - -

p_top_expr_body

p_exprp_expr','p_expr','p_argsp_findp_args_tailp_kwargs - -

p_expr

p_as - -

p_as

p_exprtASSOCp_variablep_alt - -

p_alt

p_alt'|'p_expr_basicp_expr_basic - -

p_lparen

'('p_pktbl - -

p_lbracket

'['p_pktbl - -

p_expr_basic

p_valuep_variablep_constp_lparenp_argsrparenp_constp_lparenp_findrparenp_constp_lparenp_kwargsrparenp_const'('rparenp_constp_lbracketp_argsrbracketp_constp_lbracketp_findrbracketp_constp_lbracketp_kwargsrbracketp_const'['rbrackettLBRACKp_argsrbrackettLBRACKp_findrbrackettLBRACKrbrackettLBRACEp_pktbllex_ctxt$@32p_kwargsrbracetLBRACErbracetLPARENp_pktblp_exprrparen - -

$@32

- -

p_args

p_exprp_args_headp_args_headp_argp_args_headp_restp_args_headp_rest','p_args_postp_args_tail - -

p_args_head

p_arg','p_args_headp_arg',' - -

p_args_tail

p_restp_rest','p_args_post - -

p_find

p_rest','p_args_post','p_rest - -

p_rest

tSTARtIDENTIFIERtSTAR - -

p_args_post

p_argp_args_post','p_arg - -

p_arg

p_expr - -

p_kwargs

p_kwarg','p_any_kwrestp_kwargp_kwarg','p_any_kwrest - -

p_kwarg

p_kwp_kwarg','p_kw - -

p_kw

p_kw_labelp_exprp_kw_label - -

p_kw_label

tLABELtSTRING_BEGstring_contentstLABEL_END - -

p_kwrest

kwrest_marktIDENTIFIERkwrest_mark - -

p_kwnorest

kwrest_markkeyword_nil - -

p_any_kwrest

p_kwrestp_kwnorest - -

p_value

p_primitivep_primitive_valuetDOT2p_primitive_valuep_primitive_valuetDOT3p_primitive_valuep_primitive_valuetDOT2p_primitive_valuetDOT3p_var_refp_expr_refp_consttBDOT2p_primitive_valuetBDOT3p_primitive_value - -

p_primitive

literalstringsxstringregexpwordsqwordssymbolsqsymbolskeyword_variablelambda - -

value_expr_p_primitive

p_primitive - -

p_primitive_value

value_expr_p_primitive - -

p_variable

tIDENTIFIER - -

p_var_ref

'^'tIDENTIFIER'^'nonlocal_var - -

p_expr_ref

'^'tLPARENexpr_valuerparen - -

p_const

tCOLON3cnamep_consttCOLON2cnametCONSTANT - -

opt_rescue

k_rescueexc_listexc_varthencompstmt_stmtsopt_rescuenone - -

exc_list

arg_valuemrhsnone - -

exc_var

tASSOClhsnone - -

opt_ensure

k_ensurestmtsoption_termsnone - -

literal

numericsymbol - -

strings

string - -

string

tCHARstring1stringstring1 - -

string1

tSTRING_BEGstring_contentstSTRING_END - -

xstring

tXSTRING_BEGxstring_contentstSTRING_END - -

regexp

tREGEXP_BEGregexp_contentstREGEXP_END - -

nonempty_list_' '

' 'nonempty_list_' '' ' - -

words_tWORDS_BEG_word_list

tWORDS_BEGnonempty_list_' 'word_listtSTRING_END - -

words

words_tWORDS_BEG_word_list - -

word_list

word_listwordnonempty_list_' ' - -

word

string_contentwordstring_content - -

words_tSYMBOLS_BEG_symbol_list

tSYMBOLS_BEGnonempty_list_' 'symbol_listtSTRING_END - -

symbols

words_tSYMBOLS_BEG_symbol_list - -

symbol_list

symbol_listwordnonempty_list_' ' - -

words_tQWORDS_BEG_qword_list

tQWORDS_BEGnonempty_list_' 'qword_listtSTRING_END - -

qwords

words_tQWORDS_BEG_qword_list - -

words_tQSYMBOLS_BEG_qsym_list

tQSYMBOLS_BEGnonempty_list_' 'qsym_listtSTRING_END - -

qsymbols

words_tQSYMBOLS_BEG_qsym_list - -

qword_list

qword_listtSTRING_CONTENTnonempty_list_' ' - -

qsym_list

qsym_listtSTRING_CONTENTnonempty_list_' ' - -

string_contents

string_contentsstring_content - -

xstring_contents

xstring_contentsstring_content - -

regexp_contents

regexp_contentsstring_content - -

string_content

tSTRING_CONTENTtSTRING_DVAR@33string_dvartSTRING_DBEG@34@35@36compstmt_stmtsstring_dend - -

@33

- -

@34

- -

@35

- -

@36

- -

string_dend

tSTRING_DENDEND_OF_INPUT - -

string_dvar

nonlocal_varbackref - -

symbol

ssymdsym - -

ssym

tSYMBEGsym - -

sym

fnamenonlocal_var - -

dsym

tSYMBEGstring_contentstSTRING_END - -

numeric

simple_numerictUMINUS_NUMsimple_numeric - -

simple_numeric

tINTEGERtFLOATtRATIONALtIMAGINARY - -

nonlocal_var

tIVARtGVARtCVAR - -

user_variable

tIDENTIFIERtCONSTANTnonlocal_var - -

keyword_variable

keyword_nilkeyword_selfkeyword_truekeyword_falsekeyword__FILE__keyword__LINE__keyword__ENCODING__ - -

var_ref

user_variablekeyword_variable - -

var_lhs

user_variablekeyword_variable - -

backref

tNTH_REFtBACK_REF - -

$@37

- -

superclass

'<'$@37expr_valueterm - -

f_opt_paren_args

f_paren_argsnone - -

f_paren_args

'('f_argsrparen - -

f_arglist

f_paren_args@38f_argsterm - -

@38

- -

f_kw_arg_value

f_labelarg_valuef_label - -

f_kwarg_arg_value

f_kw_arg_valuef_kwarg_arg_value','f_kw_arg_value - -

args_tail

f_kwarg_arg_value','f_kwrestopt_f_block_argf_kwarg_arg_valueopt_f_block_argf_any_kwrestopt_f_block_argf_block_argargs_forward - -

f_opt_arg_value

f_arg_asgnf_eqarg_value - -

f_optarg_arg_value

f_opt_arg_valuef_optarg_arg_value','f_opt_arg_value - -

opt_args_tail_args_tail

','args_tail - -

f_args

f_arg','f_optarg_arg_value','f_rest_argopt_args_tail_args_tailf_arg','f_optarg_arg_value','f_rest_arg','f_argopt_args_tail_args_tailf_arg','f_optarg_arg_valueopt_args_tail_args_tailf_arg','f_optarg_arg_value','f_argopt_args_tail_args_tailf_arg','f_rest_argopt_args_tail_args_tailf_arg','f_rest_arg','f_argopt_args_tail_args_tailf_argopt_args_tail_args_tailf_optarg_arg_value','f_rest_argopt_args_tail_args_tailf_optarg_arg_value','f_rest_arg','f_argopt_args_tail_args_tailf_optarg_arg_valueopt_args_tail_args_tailf_optarg_arg_value','f_argopt_args_tail_args_tailf_rest_argopt_args_tail_args_tailf_rest_arg','f_argopt_args_tail_args_tailargs_tail - -

args_forward

tBDOT3 - -

f_bad_arg

tCONSTANTtIVARtGVARtCVAR - -

f_norm_arg

f_bad_argtIDENTIFIER - -

f_arg_asgn

f_norm_arg - -

f_arg_item

f_arg_asgntLPARENf_margsrparen - -

f_arg

f_arg_itemf_arg','f_arg_item - -

f_label

tLABEL - -

kwrest_mark

tPOWtDSTAR - -

f_no_kwarg

p_kwnorest - -

f_kwrest

kwrest_marktIDENTIFIERkwrest_mark - -

restarg_mark

'*'tSTAR - -

f_rest_arg

restarg_marktIDENTIFIERrestarg_mark - -

blkarg_mark

'&'tAMPER - -

f_block_arg

blkarg_marktIDENTIFIERblkarg_mark - -

opt_f_block_arg

','f_block_argnone - -

value_expr_var_ref

var_ref - -

singleton

value_expr_var_ref'('$@39exprrparen - -

$@39

- -

assoc_list

noneassocstrailer - -

assocs

assocassocs','assoc - -

assoc

arg_valuetASSOCarg_valuetLABELarg_valuetLABELtSTRING_BEGstring_contentstLABEL_ENDarg_valuetDSTARarg_valuetDSTAR - -

operation

tIDENTIFIERtCONSTANTtFID - -

operation2

operationop - -

operation3

tIDENTIFIERtFIDop - -

dot_or_colon

'.'tCOLON2 - -

call_op

'.'tANDDOT - -

call_op2

call_optCOLON2 - -

rparen

option_'\n'')' - -

rbracket

option_'\n'']' - -

rbrace

option_'\n''}' - -

trailer

option_'\n'',' - -

term

';''\n' - -

terms

termterms';' - -

none

- +

$accept

+ + + + + +program +END_OF_INPUT + +

$@1

+ + + + + + +

option_terms

+ + + + + + +terms + +

compstmt_top_stmts

+ + + + + +top_stmts +option_terms + +

program

+ + + + + +$@1 +compstmt_top_stmts + +

top_stmts

+ + + + + +none + +top_stmt + +top_stmts +terms +top_stmt + +

top_stmt

+ + + + + +stmt + +keyword_BEGIN +begin_block + +

block_open

+ + + + + +'{' + +

begin_block

+ + + + + +block_open +compstmt_top_stmts +'}' + +

compstmt_stmts

+ + + + + +stmts +option_terms + +

$@2

+ + + + + + +

$@3

+ + + + + + +

bodystmt

+ + + + + +compstmt_stmts +lex_ctxt +opt_rescue +k_else +$@2 +compstmt_stmts +$@3 +opt_ensure + +compstmt_stmts +lex_ctxt +opt_rescue +$@4 +opt_ensure + +

$@4

+ + + + + + +

stmts

+ + + + + +none + +stmt_or_begin + +stmts +terms +stmt_or_begin + +

stmt_or_begin

+ + + + + +stmt + +keyword_BEGIN +$@5 +begin_block + +

$@5

+ + + + + + +

allow_exits

+ + + + + + +

k_END

+ + + + + +keyword_END +lex_ctxt + +

$@6

+ + + + + + +

stmt

+ + + + + +keyword_alias +fitem +$@6 +fitem + +keyword_alias +tGVAR +tGVAR + +keyword_alias +tGVAR +tBACK_REF + +keyword_alias +tGVAR +tNTH_REF + +keyword_undef +undef_list + +stmt +modifier_if +expr_value + +stmt +modifier_unless +expr_value + +stmt +modifier_while +expr_value + +stmt +modifier_until +expr_value + +stmt +modifier_rescue +after_rescue +stmt + +k_END +allow_exits +'{' +compstmt_stmts +'}' + +command_asgn + +mlhs +'=' +lex_ctxt +command_call_value + +asgn_lhs_mrhs + +mlhs +'=' +lex_ctxt +mrhs_arg +modifier_rescue +after_rescue +stmt + +mlhs +'=' +lex_ctxt +mrhs_arg + +expr + +YYerror + +

asgn_lhs_mrhs

+ + + + + +lhs +'=' +lex_ctxt +mrhs + +

asgn_lhs_command_rhs

+ + + + + +lhs +'=' +lex_ctxt +command_rhs + +

command_asgn

+ + + + + +asgn_lhs_command_rhs + +op_asgn_command_rhs + +def_endless_method_endless_command + +

op_asgn_command_rhs

+ + + + + +var_lhs +tOP_ASGN +lex_ctxt +command_rhs + +primary_value +'[' +opt_call_args +rbracket +tOP_ASGN +lex_ctxt +command_rhs + +primary_value +call_op +tIDENTIFIER +tOP_ASGN +lex_ctxt +command_rhs + +primary_value +call_op +tCONSTANT +tOP_ASGN +lex_ctxt +command_rhs + +primary_value +tCOLON2 +tIDENTIFIER +tOP_ASGN +lex_ctxt +command_rhs + +primary_value +tCOLON2 +tCONSTANT +tOP_ASGN +lex_ctxt +command_rhs + +backref +tOP_ASGN +lex_ctxt +command_rhs + +

def_endless_method_endless_command

+ + + + + +defn_head +f_opt_paren_args +'=' +endless_command + +defs_head +f_opt_paren_args +'=' +endless_command + +

endless_command

+ + + + + +command + +endless_command +modifier_rescue +after_rescue +arg + +keyword_not +option_'\n' +endless_command + +

option_'\n'

+ + + + + + +'\n' + +

command_rhs

+ + + + + +command_call_value + +command_call_value +modifier_rescue +after_rescue +stmt + +command_asgn + +

expr

+ + + + + +command_call + +expr +keyword_and +expr + +expr +keyword_or +expr + +keyword_not +option_'\n' +expr + +'!' +command_call + +arg +tASSOC +$@7 +p_in_kwarg +p_pvtbl +p_pktbl +p_top_expr_body + +arg +keyword_in +$@8 +p_in_kwarg +p_pvtbl +p_pktbl +p_top_expr_body + +arg + +

$@7

+ + + + + + +

$@8

+ + + + + + +

def_name

+ + + + + +fname + +

defn_head

+ + + + + +k_def +def_name + +

$@9

+ + + + + + +

defs_head

+ + + + + +k_def +singleton +dot_or_colon +$@9 +def_name + +

value_expr_expr

+ + + + + +expr + +

expr_value

+ + + + + +value_expr_expr + +YYerror + +

$@10

+ + + + + + +

$@11

+ + + + + + +

expr_value_do

+ + + + + +$@10 +expr_value +do +$@11 + +

command_call

+ + + + + +command + +block_command + +

value_expr_command_call

+ + + + + +command_call + +

command_call_value

+ + + + + +value_expr_command_call + +

block_command

+ + + + + +block_call + +block_call +call_op2 +operation2 +command_args + +

cmd_brace_block

+ + + + + +tLBRACE_ARG +brace_body +'}' + +

fcall

+ + + + + +operation + +

command

+ + + + + +fcall +command_args + +fcall +command_args +cmd_brace_block + +primary_value +call_op +operation2 +command_args + +primary_value +call_op +operation2 +command_args +cmd_brace_block + +primary_value +tCOLON2 +operation2 +command_args + +primary_value +tCOLON2 +operation2 +command_args +cmd_brace_block + +primary_value +tCOLON2 +tCONSTANT +'{' +brace_body +'}' + +keyword_super +command_args + +k_yield +command_args + +k_return +call_args + +keyword_break +call_args + +keyword_next +call_args + +

mlhs

+ + + + + +mlhs_basic + +tLPAREN +mlhs_inner +rparen + +

mlhs_inner

+ + + + + +mlhs_basic + +tLPAREN +mlhs_inner +rparen + +

mlhs_basic

+ + + + + +mlhs_head + +mlhs_head +mlhs_item + +mlhs_head +tSTAR +mlhs_node + +mlhs_head +tSTAR +mlhs_node +',' +mlhs_post + +mlhs_head +tSTAR + +mlhs_head +tSTAR +',' +mlhs_post + +tSTAR +mlhs_node + +tSTAR +mlhs_node +',' +mlhs_post + +tSTAR + +tSTAR +',' +mlhs_post + +

mlhs_item

+ + + + + +mlhs_node + +tLPAREN +mlhs_inner +rparen + +

mlhs_head

+ + + + + +mlhs_item +',' + +mlhs_head +mlhs_item +',' + +

mlhs_post

+ + + + + +mlhs_item + +mlhs_post +',' +mlhs_item + +

mlhs_node

+ + + + + +user_variable + +keyword_variable + +primary_value +'[' +opt_call_args +rbracket + +primary_value +call_op +tIDENTIFIER + +primary_value +call_op +tCONSTANT + +primary_value +tCOLON2 +tIDENTIFIER + +primary_value +tCOLON2 +tCONSTANT + +tCOLON3 +tCONSTANT + +backref + +

lhs

+ + + + + +user_variable + +keyword_variable + +primary_value +'[' +opt_call_args +rbracket + +primary_value +call_op +tIDENTIFIER + +primary_value +tCOLON2 +tIDENTIFIER + +primary_value +call_op +tCONSTANT + +primary_value +tCOLON2 +tCONSTANT + +tCOLON3 +tCONSTANT + +backref + +

cname

+ + + + + +tIDENTIFIER + +tCONSTANT + +

cpath

+ + + + + +tCOLON3 +cname + +cname + +primary_value +tCOLON2 +cname + +

fname

+ + + + + +tIDENTIFIER + +tCONSTANT + +tFID + +op + +reswords + +

fitem

+ + + + + +fname + +symbol + +

undef_list

+ + + + + +fitem + +undef_list +',' +$@12 +fitem + +

$@12

+ + + + + + +

op

+ + + + + +'|' + +'^' + +'&' + +tCMP + +tEQ + +tEQQ + +tMATCH + +tNMATCH + +'>' + +tGEQ + +'<' + +tLEQ + +tNEQ + +tLSHFT + +tRSHFT + +'+' + +'-' + +'*' + +tSTAR + +'/' + +'%' + +tPOW + +tDSTAR + +'!' + +'~' + +tUPLUS + +tUMINUS + +tAREF + +tASET + +'`' + +

reswords

+ + + + + +keyword__LINE__ + +keyword__FILE__ + +keyword__ENCODING__ + +keyword_BEGIN + +keyword_END + +keyword_alias + +keyword_and + +keyword_begin + +keyword_break + +keyword_case + +keyword_class + +keyword_def + +keyword_defined + +keyword_do + +keyword_else + +keyword_elsif + +keyword_end + +keyword_ensure + +keyword_false + +keyword_for + +keyword_in + +keyword_module + +keyword_next + +keyword_nil + +keyword_not + +keyword_or + +keyword_redo + +keyword_rescue + +keyword_retry + +keyword_return + +keyword_self + +keyword_super + +keyword_then + +keyword_true + +keyword_undef + +keyword_when + +keyword_yield + +keyword_if + +keyword_unless + +keyword_while + +keyword_until + +

asgn_lhs_arg_rhs

+ + + + + +lhs +'=' +lex_ctxt +arg_rhs + +

arg

+ + + + + +asgn_lhs_arg_rhs + +op_asgn_arg_rhs + +tCOLON3 +tCONSTANT +tOP_ASGN +lex_ctxt +arg_rhs + +arg +tDOT2 +arg + +arg +tDOT3 +arg + +arg +tDOT2 + +arg +tDOT3 + +tBDOT2 +arg + +tBDOT3 +arg + +arg +'+' +arg + +arg +'-' +arg + +arg +'*' +arg + +arg +'/' +arg + +arg +'%' +arg + +arg +tPOW +arg + +tUMINUS_NUM +simple_numeric +tPOW +arg + +tUPLUS +arg + +tUMINUS +arg + +arg +'|' +arg + +arg +'^' +arg + +arg +'&' +arg + +arg +tCMP +arg + +rel_expr + +arg +tEQ +arg + +arg +tEQQ +arg + +arg +tNEQ +arg + +arg +tMATCH +arg + +arg +tNMATCH +arg + +'!' +arg + +'~' +arg + +arg +tLSHFT +arg + +arg +tRSHFT +arg + +arg +tANDOP +arg + +arg +tOROP +arg + +keyword_defined +option_'\n' +begin_defined +arg + +arg +'?' +arg +option_'\n' +':' +arg + +def_endless_method_endless_arg + +primary + +

op_asgn_arg_rhs

+ + + + + +var_lhs +tOP_ASGN +lex_ctxt +arg_rhs + +primary_value +'[' +opt_call_args +rbracket +tOP_ASGN +lex_ctxt +arg_rhs + +primary_value +call_op +tIDENTIFIER +tOP_ASGN +lex_ctxt +arg_rhs + +primary_value +call_op +tCONSTANT +tOP_ASGN +lex_ctxt +arg_rhs + +primary_value +tCOLON2 +tIDENTIFIER +tOP_ASGN +lex_ctxt +arg_rhs + +primary_value +tCOLON2 +tCONSTANT +tOP_ASGN +lex_ctxt +arg_rhs + +backref +tOP_ASGN +lex_ctxt +arg_rhs + +

def_endless_method_endless_arg

+ + + + + +defn_head +f_opt_paren_args +'=' +endless_arg + +defs_head +f_opt_paren_args +'=' +endless_arg + +

endless_arg

+ + + + + +arg + +endless_arg +modifier_rescue +after_rescue +arg + +keyword_not +option_'\n' +endless_arg + +

relop

+ + + + + +'>' + +'<' + +tGEQ + +tLEQ + +

rel_expr

+ + + + + +arg +relop +arg + +rel_expr +relop +arg + +

lex_ctxt

+ + + + + +none + +

begin_defined

+ + + + + +lex_ctxt + +

after_rescue

+ + + + + +lex_ctxt + +

value_expr_arg

+ + + + + +arg + +

arg_value

+ + + + + +value_expr_arg + +

aref_args

+ + + + + +none + +args +trailer + +args +',' +assocs +trailer + +assocs +trailer + +

arg_rhs

+ + + + + +arg + +arg +modifier_rescue +after_rescue +arg + +

paren_args

+ + + + + +'(' +opt_call_args +rparen + +'(' +args +',' +args_forward +rparen + +'(' +args_forward +rparen + +

opt_paren_args

+ + + + + +none + +paren_args + +

opt_call_args

+ + + + + +none + +call_args + +args +',' + +args +',' +assocs +',' + +assocs +',' + +

value_expr_command

+ + + + + +command + +

call_args

+ + + + + +value_expr_command + +args +opt_block_arg + +assocs +opt_block_arg + +args +',' +assocs +opt_block_arg + +block_arg + +

$@13

+ + + + + + +

command_args

+ + + + + +$@13 +call_args + +

block_arg

+ + + + + +tAMPER +arg_value + +tAMPER + +

opt_block_arg

+ + + + + +',' +block_arg + +none + +

args

+ + + + + +arg_value + +arg_splat + +args +',' +arg_value + +args +',' +arg_splat + +

arg_splat

+ + + + + +tSTAR +arg_value + +tSTAR + +

mrhs_arg

+ + + + + +mrhs + +arg_value + +

mrhs

+ + + + + +args +',' +arg_value + +args +',' +tSTAR +arg_value + +tSTAR +arg_value + +

primary

+ + + + + +literal + +strings + +xstring + +regexp + +words + +qwords + +symbols + +qsymbols + +var_ref + +backref + +tFID + +k_begin +$@14 +bodystmt +k_end + +tLPAREN_ARG +compstmt_stmts +$@15 +')' + +tLPAREN +compstmt_stmts +')' + +primary_value +tCOLON2 +tCONSTANT + +tCOLON3 +tCONSTANT + +tLBRACK +aref_args +']' + +tLBRACE +assoc_list +'}' + +k_return + +k_yield +'(' +call_args +rparen + +k_yield +'(' +rparen + +k_yield + +keyword_defined +option_'\n' +'(' +begin_defined +expr +rparen + +keyword_not +'(' +expr +rparen + +keyword_not +'(' +rparen + +fcall +brace_block + +method_call + +method_call +brace_block + +lambda + +k_if +expr_value +then +compstmt_stmts +if_tail +k_end + +k_unless +expr_value +then +compstmt_stmts +opt_else +k_end + +k_while +expr_value_do +compstmt_stmts +k_end + +k_until +expr_value_do +compstmt_stmts +k_end + +k_case +expr_value +option_terms +@16 +case_body +k_end + +k_case +option_terms +@17 +case_body +k_end + +k_case +expr_value +option_terms +p_case_body +k_end + +k_for +for_var +keyword_in +$@18 +expr_value +do +$@19 +compstmt_stmts +k_end + +k_class +cpath +superclass +$@20 +bodystmt +k_end + +k_class +tLSHFT +expr_value +$@21 +term +bodystmt +k_end + +k_module +cpath +$@22 +bodystmt +k_end + +defn_head +f_arglist +$@23 +bodystmt +k_end + +defs_head +f_arglist +$@24 +bodystmt +k_end + +keyword_break + +keyword_next + +keyword_redo + +keyword_retry + +

$@14

+ + + + + + +

$@15

+ + + + + + +

@16

+ + + + + + +

@17

+ + + + + + +

$@18

+ + + + + + +

$@19

+ + + + + + +

$@20

+ + + + + + +

$@21

+ + + + + + +

$@22

+ + + + + + +

$@23

+ + + + + + +

$@24

+ + + + + + +

value_expr_primary

+ + + + + +primary + +

primary_value

+ + + + + +value_expr_primary + +

k_begin

+ + + + + +keyword_begin + +

k_if

+ + + + + +keyword_if + +

k_unless

+ + + + + +keyword_unless + +

k_while

+ + + + + +keyword_while +allow_exits + +

k_until

+ + + + + +keyword_until +allow_exits + +

k_case

+ + + + + +keyword_case + +

k_for

+ + + + + +keyword_for +allow_exits + +

k_class

+ + + + + +keyword_class + +

k_module

+ + + + + +keyword_module + +

k_def

+ + + + + +keyword_def + +

k_do

+ + + + + +keyword_do + +

k_do_block

+ + + + + +keyword_do_block + +

k_rescue

+ + + + + +keyword_rescue + +

k_ensure

+ + + + + +keyword_ensure + +

k_when

+ + + + + +keyword_when + +

k_else

+ + + + + +keyword_else + +

k_elsif

+ + + + + +keyword_elsif + +

k_end

+ + + + + +keyword_end + +tDUMNY_END + +

k_return

+ + + + + +keyword_return + +

k_yield

+ + + + + +keyword_yield + +

then

+ + + + + +term + +keyword_then + +term +keyword_then + +

do

+ + + + + +term + +keyword_do_cond + +

if_tail

+ + + + + +opt_else + +k_elsif +expr_value +then +compstmt_stmts +if_tail + +

opt_else

+ + + + + +none + +k_else +compstmt_stmts + +

for_var

+ + + + + +lhs + +mlhs + +

f_marg

+ + + + + +f_norm_arg + +tLPAREN +f_margs +rparen + +

f_marg_list

+ + + + + +f_marg + +f_marg_list +',' +f_marg + +

f_margs

+ + + + + +f_marg_list + +f_marg_list +',' +f_rest_marg + +f_marg_list +',' +f_rest_marg +',' +f_marg_list + +f_rest_marg + +f_rest_marg +',' +f_marg_list + +

f_rest_marg

+ + + + + +tSTAR +f_norm_arg + +tSTAR + +

f_any_kwrest

+ + + + + +f_kwrest + +f_no_kwarg + +

$@25

+ + + + + + +

f_eq

+ + + + + +$@25 +'=' + +

f_kw_primary_value

+ + + + + +f_label +primary_value + +f_label + +

f_kwarg_primary_value

+ + + + + +f_kw_primary_value + +f_kwarg_primary_value +',' +f_kw_primary_value + +

block_args_tail

+ + + + + +f_kwarg_primary_value +',' +f_kwrest +opt_f_block_arg + +f_kwarg_primary_value +opt_f_block_arg + +f_any_kwrest +opt_f_block_arg + +f_block_arg + +

excessed_comma

+ + + + + +',' + +

f_opt_primary_value

+ + + + + +f_arg_asgn +f_eq +primary_value + +

f_optarg_primary_value

+ + + + + +f_opt_primary_value + +f_optarg_primary_value +',' +f_opt_primary_value + +

opt_args_tail_block_args_tail

+ + + + + +',' +block_args_tail + + +

block_param

+ + + + + +f_arg +',' +f_optarg_primary_value +',' +f_rest_arg +opt_args_tail_block_args_tail + +f_arg +',' +f_optarg_primary_value +',' +f_rest_arg +',' +f_arg +opt_args_tail_block_args_tail + +f_arg +',' +f_optarg_primary_value +opt_args_tail_block_args_tail + +f_arg +',' +f_optarg_primary_value +',' +f_arg +opt_args_tail_block_args_tail + +f_arg +',' +f_rest_arg +opt_args_tail_block_args_tail + +f_arg +excessed_comma + +f_arg +',' +f_rest_arg +',' +f_arg +opt_args_tail_block_args_tail + +f_arg +opt_args_tail_block_args_tail + +f_optarg_primary_value +',' +f_rest_arg +opt_args_tail_block_args_tail + +f_optarg_primary_value +',' +f_rest_arg +',' +f_arg +opt_args_tail_block_args_tail + +f_optarg_primary_value +opt_args_tail_block_args_tail + +f_optarg_primary_value +',' +f_arg +opt_args_tail_block_args_tail + +f_rest_arg +opt_args_tail_block_args_tail + +f_rest_arg +',' +f_arg +opt_args_tail_block_args_tail + +block_args_tail + +

opt_block_param

+ + + + + +none + +block_param_def + +

block_param_def

+ + + + + +'|' +opt_bv_decl +'|' + +'|' +block_param +opt_bv_decl +'|' + +

opt_bv_decl

+ + + + + +option_'\n' + +option_'\n' +';' +bv_decls +option_'\n' + +

bv_decls

+ + + + + +bvar + +bv_decls +',' +bvar + +

bvar

+ + + + + +tIDENTIFIER + +f_bad_arg + +

max_numparam

+ + + + + + +

numparam

+ + + + + + +

it_id

+ + + + + + +

@26

+ + + + + + +

$@27

+ + + + + + +

lambda

+ + + + + +tLAMBDA +@26 +max_numparam +numparam +it_id +allow_exits +f_larglist +$@27 +lambda_body + +

f_larglist

+ + + + + +'(' +f_args +opt_bv_decl +')' + +f_args + +

lambda_body

+ + + + + +tLAMBEG +compstmt_stmts +'}' + +keyword_do_LAMBDA +$@28 +bodystmt +k_end + +

$@28

+ + + + + + +

do_block

+ + + + + +k_do_block +do_body +k_end + +

block_call

+ + + + + +command +do_block + +block_call +call_op2 +operation2 +opt_paren_args + +block_call +call_op2 +operation2 +opt_paren_args +brace_block + +block_call +call_op2 +operation2 +command_args +do_block + +

method_call

+ + + + + +fcall +paren_args + +primary_value +call_op +operation2 +opt_paren_args + +primary_value +tCOLON2 +operation2 +paren_args + +primary_value +tCOLON2 +operation3 + +primary_value +call_op +paren_args + +primary_value +tCOLON2 +paren_args + +keyword_super +paren_args + +keyword_super + +primary_value +'[' +opt_call_args +rbracket + +

brace_block

+ + + + + +'{' +brace_body +'}' + +k_do +do_body +k_end + +

@29

+ + + + + + +

brace_body

+ + + + + +@29 +max_numparam +numparam +it_id +allow_exits +opt_block_param +compstmt_stmts + +

@30

+ + + + + + +

do_body

+ + + + + +@30 +max_numparam +numparam +it_id +allow_exits +opt_block_param +bodystmt + +

case_args

+ + + + + +arg_value + +tSTAR +arg_value + +case_args +',' +arg_value + +case_args +',' +tSTAR +arg_value + +

case_body

+ + + + + +k_when +case_args +then +compstmt_stmts +cases + +

cases

+ + + + + +opt_else + +case_body + +

p_pvtbl

+ + + + + + +

p_pktbl

+ + + + + + +

p_in_kwarg

+ + + + + + +

$@31

+ + + + + + +

p_case_body

+ + + + + +keyword_in +p_in_kwarg +p_pvtbl +p_pktbl +p_top_expr +then +$@31 +compstmt_stmts +p_cases + +

p_cases

+ + + + + +opt_else + +p_case_body + +

p_top_expr

+ + + + + +p_top_expr_body + +p_top_expr_body +modifier_if +expr_value + +p_top_expr_body +modifier_unless +expr_value + +

p_top_expr_body

+ + + + + +p_expr + +p_expr +',' + +p_expr +',' +p_args + +p_find + +p_args_tail + +p_kwargs + +

p_expr

+ + + + + +p_as + +

p_as

+ + + + + +p_expr +tASSOC +p_variable + +p_alt + +

p_alt

+ + + + + +p_alt +'|' +p_expr_basic + +p_expr_basic + +

p_lparen

+ + + + + +'(' +p_pktbl + +

p_lbracket

+ + + + + +'[' +p_pktbl + +

p_expr_basic

+ + + + + +p_value + +p_variable + +p_const +p_lparen +p_args +rparen + +p_const +p_lparen +p_find +rparen + +p_const +p_lparen +p_kwargs +rparen + +p_const +'(' +rparen + +p_const +p_lbracket +p_args +rbracket + +p_const +p_lbracket +p_find +rbracket + +p_const +p_lbracket +p_kwargs +rbracket + +p_const +'[' +rbracket + +tLBRACK +p_args +rbracket + +tLBRACK +p_find +rbracket + +tLBRACK +rbracket + +tLBRACE +p_pktbl +lex_ctxt +$@32 +p_kwargs +rbrace + +tLBRACE +rbrace + +tLPAREN +p_pktbl +p_expr +rparen + +

$@32

+ + + + + + +

p_args

+ + + + + +p_expr + +p_args_head + +p_args_head +p_arg + +p_args_head +p_rest + +p_args_head +p_rest +',' +p_args_post + +p_args_tail + +

p_args_head

+ + + + + +p_arg +',' + +p_args_head +p_arg +',' + +

p_args_tail

+ + + + + +p_rest + +p_rest +',' +p_args_post + +

p_find

+ + + + + +p_rest +',' +p_args_post +',' +p_rest + +

p_rest

+ + + + + +tSTAR +tIDENTIFIER + +tSTAR + +

p_args_post

+ + + + + +p_arg + +p_args_post +',' +p_arg + +

p_arg

+ + + + + +p_expr + +

p_kwargs

+ + + + + +p_kwarg +',' +p_any_kwrest + +p_kwarg + +p_kwarg +',' + +p_any_kwrest + +

p_kwarg

+ + + + + +p_kw + +p_kwarg +',' +p_kw + +

p_kw

+ + + + + +p_kw_label +p_expr + +p_kw_label + +

p_kw_label

+ + + + + +tLABEL + +tSTRING_BEG +string_contents +tLABEL_END + +

p_kwrest

+ + + + + +kwrest_mark +tIDENTIFIER + +kwrest_mark + +

p_kwnorest

+ + + + + +kwrest_mark +keyword_nil + +

p_any_kwrest

+ + + + + +p_kwrest + +p_kwnorest + +

p_value

+ + + + + +p_primitive + +p_primitive_value +tDOT2 +p_primitive_value + +p_primitive_value +tDOT3 +p_primitive_value + +p_primitive_value +tDOT2 + +p_primitive_value +tDOT3 + +p_var_ref + +p_expr_ref + +p_const + +tBDOT2 +p_primitive_value + +tBDOT3 +p_primitive_value + +

p_primitive

+ + + + + +literal + +strings + +xstring + +regexp + +words + +qwords + +symbols + +qsymbols + +keyword_variable + +lambda + +

value_expr_p_primitive

+ + + + + +p_primitive + +

p_primitive_value

+ + + + + +value_expr_p_primitive + +

p_variable

+ + + + + +tIDENTIFIER + +

p_var_ref

+ + + + + +'^' +tIDENTIFIER + +'^' +nonlocal_var + +

p_expr_ref

+ + + + + +'^' +tLPAREN +expr_value +rparen + +

p_const

+ + + + + +tCOLON3 +cname + +p_const +tCOLON2 +cname + +tCONSTANT + +

opt_rescue

+ + + + + +k_rescue +exc_list +exc_var +then +compstmt_stmts +opt_rescue + +none + +

exc_list

+ + + + + +arg_value + +mrhs + +none + +

exc_var

+ + + + + +tASSOC +lhs + +none + +

opt_ensure

+ + + + + +k_ensure +stmts +option_terms + +none + +

literal

+ + + + + +numeric + +symbol + +

strings

+ + + + + +string + +

string

+ + + + + +tCHAR + +string1 + +string +string1 + +

string1

+ + + + + +tSTRING_BEG +string_contents +tSTRING_END + +

xstring

+ + + + + +tXSTRING_BEG +xstring_contents +tSTRING_END + +

regexp

+ + + + + +tREGEXP_BEG +regexp_contents +tREGEXP_END + +

nonempty_list_' '

+ + + + + +' ' + +nonempty_list_' ' +' ' + +

words_tWORDS_BEG_word_list

+ + + + + +tWORDS_BEG +nonempty_list_' ' +word_list +tSTRING_END + +

words

+ + + + + +words_tWORDS_BEG_word_list + +

word_list

+ + + + + + +word_list +word +nonempty_list_' ' + +

word

+ + + + + +string_content + +word +string_content + +

words_tSYMBOLS_BEG_symbol_list

+ + + + + +tSYMBOLS_BEG +nonempty_list_' ' +symbol_list +tSTRING_END + +

symbols

+ + + + + +words_tSYMBOLS_BEG_symbol_list + +

symbol_list

+ + + + + + +symbol_list +word +nonempty_list_' ' + +

words_tQWORDS_BEG_qword_list

+ + + + + +tQWORDS_BEG +nonempty_list_' ' +qword_list +tSTRING_END + +

qwords

+ + + + + +words_tQWORDS_BEG_qword_list + +

words_tQSYMBOLS_BEG_qsym_list

+ + + + + +tQSYMBOLS_BEG +nonempty_list_' ' +qsym_list +tSTRING_END + +

qsymbols

+ + + + + +words_tQSYMBOLS_BEG_qsym_list + +

qword_list

+ + + + + + +qword_list +tSTRING_CONTENT +nonempty_list_' ' + +

qsym_list

+ + + + + + +qsym_list +tSTRING_CONTENT +nonempty_list_' ' + +

string_contents

+ + + + + + +string_contents +string_content + +

xstring_contents

+ + + + + + +xstring_contents +string_content + +

regexp_contents

+ + + + + + +regexp_contents +string_content + +

string_content

+ + + + + +tSTRING_CONTENT + +tSTRING_DVAR +@33 +string_dvar + +tSTRING_DBEG +@34 +@35 +@36 +compstmt_stmts +string_dend + +

@33

+ + + + + + +

@34

+ + + + + + +

@35

+ + + + + + +

@36

+ + + + + + +

string_dend

+ + + + + +tSTRING_DEND + +END_OF_INPUT + +

string_dvar

+ + + + + +nonlocal_var + +backref + +

symbol

+ + + + + +ssym + +dsym + +

ssym

+ + + + + +tSYMBEG +sym + +

sym

+ + + + + +fname + +nonlocal_var + +

dsym

+ + + + + +tSYMBEG +string_contents +tSTRING_END + +

numeric

+ + + + + +simple_numeric + +tUMINUS_NUM +simple_numeric + +

simple_numeric

+ + + + + +tINTEGER + +tFLOAT + +tRATIONAL + +tIMAGINARY + +

nonlocal_var

+ + + + + +tIVAR + +tGVAR + +tCVAR + +

user_variable

+ + + + + +tIDENTIFIER + +tCONSTANT + +nonlocal_var + +

keyword_variable

+ + + + + +keyword_nil + +keyword_self + +keyword_true + +keyword_false + +keyword__FILE__ + +keyword__LINE__ + +keyword__ENCODING__ + +

var_ref

+ + + + + +user_variable + +keyword_variable + +

var_lhs

+ + + + + +user_variable + +keyword_variable + +

backref

+ + + + + +tNTH_REF + +tBACK_REF + +

$@37

+ + + + + + +

superclass

+ + + + + +'<' +$@37 +expr_value +term + + +

f_opt_paren_args

+ + + + + +f_paren_args + +none + +

f_paren_args

+ + + + + +'(' +f_args +rparen + +

f_arglist

+ + + + + +f_paren_args + +@38 +f_args +term + +

@38

+ + + + + + +

f_kw_arg_value

+ + + + + +f_label +arg_value + +f_label + +

f_kwarg_arg_value

+ + + + + +f_kw_arg_value + +f_kwarg_arg_value +',' +f_kw_arg_value + +

args_tail

+ + + + + +f_kwarg_arg_value +',' +f_kwrest +opt_f_block_arg + +f_kwarg_arg_value +opt_f_block_arg + +f_any_kwrest +opt_f_block_arg + +f_block_arg + +args_forward + +

f_opt_arg_value

+ + + + + +f_arg_asgn +f_eq +arg_value + +

f_optarg_arg_value

+ + + + + +f_opt_arg_value + +f_optarg_arg_value +',' +f_opt_arg_value + +

opt_args_tail_args_tail

+ + + + + +',' +args_tail + + +

f_args

+ + + + + +f_arg +',' +f_optarg_arg_value +',' +f_rest_arg +opt_args_tail_args_tail + +f_arg +',' +f_optarg_arg_value +',' +f_rest_arg +',' +f_arg +opt_args_tail_args_tail + +f_arg +',' +f_optarg_arg_value +opt_args_tail_args_tail + +f_arg +',' +f_optarg_arg_value +',' +f_arg +opt_args_tail_args_tail + +f_arg +',' +f_rest_arg +opt_args_tail_args_tail + +f_arg +',' +f_rest_arg +',' +f_arg +opt_args_tail_args_tail + +f_arg +opt_args_tail_args_tail + +f_optarg_arg_value +',' +f_rest_arg +opt_args_tail_args_tail + +f_optarg_arg_value +',' +f_rest_arg +',' +f_arg +opt_args_tail_args_tail + +f_optarg_arg_value +opt_args_tail_args_tail + +f_optarg_arg_value +',' +f_arg +opt_args_tail_args_tail + +f_rest_arg +opt_args_tail_args_tail + +f_rest_arg +',' +f_arg +opt_args_tail_args_tail + +args_tail + + +

args_forward

+ + + + + +tBDOT3 + +

f_bad_arg

+ + + + + +tCONSTANT + +tIVAR + +tGVAR + +tCVAR + +

f_norm_arg

+ + + + + +f_bad_arg + +tIDENTIFIER + +

f_arg_asgn

+ + + + + +f_norm_arg + +

f_arg_item

+ + + + + +f_arg_asgn + +tLPAREN +f_margs +rparen + +

f_arg

+ + + + + +f_arg_item + +f_arg +',' +f_arg_item + +

f_label

+ + + + + +tLABEL + +

kwrest_mark

+ + + + + +tPOW + +tDSTAR + +

f_no_kwarg

+ + + + + +p_kwnorest + +

f_kwrest

+ + + + + +kwrest_mark +tIDENTIFIER + +kwrest_mark + +

restarg_mark

+ + + + + +'*' + +tSTAR + +

f_rest_arg

+ + + + + +restarg_mark +tIDENTIFIER + +restarg_mark + +

blkarg_mark

+ + + + + +'&' + +tAMPER + +

f_block_arg

+ + + + + +blkarg_mark +tIDENTIFIER + +blkarg_mark + +

opt_f_block_arg

+ + + + + +',' +f_block_arg + +none + +

value_expr_var_ref

+ + + + + +var_ref + +

singleton

+ + + + + +value_expr_var_ref + +'(' +$@39 +expr +rparen + +

$@39

+ + + + + + +

assoc_list

+ + + + + +none + +assocs +trailer + +

assocs

+ + + + + +assoc + +assocs +',' +assoc + +

assoc

+ + + + + +arg_value +tASSOC +arg_value + +tLABEL +arg_value + +tLABEL + +tSTRING_BEG +string_contents +tLABEL_END +arg_value + +tDSTAR +arg_value + +tDSTAR + +

operation

+ + + + + +tIDENTIFIER + +tCONSTANT + +tFID + +

operation2

+ + + + + +operation + +op + +

operation3

+ + + + + +tIDENTIFIER + +tFID + +op + +

dot_or_colon

+ + + + + +'.' + +tCOLON2 + +

call_op

+ + + + + +'.' + +tANDDOT + +

call_op2

+ + + + + +call_op + +tCOLON2 + +

rparen

+ + + + + +option_'\n' +')' + +

rbracket

+ + + + + +option_'\n' +']' + +

rbrace

+ + + + + +option_'\n' +'}' + +

trailer

+ + + + + +option_'\n' + +',' + +

term

+ + + + + +';' + +'\n' + +

terms

+ + + + + +term + +terms +';' + +

none

+ + + + + + + + diff --git a/spec/lrama/diagram_spec.rb b/spec/lrama/diagram_spec.rb index a5c5fece..10f532df 100644 --- a/spec/lrama/diagram_spec.rb +++ b/spec/lrama/diagram_spec.rb @@ -21,8 +21,8 @@ describe ".render" do it "renders a diagram" do expect { Lrama::Diagram.render(out: out, grammar: grammar) }.not_to raise_error - expect(out.string).to include("

$accept

") - expect(out.string).to include("

unused

") + expect(out.string).to include('

$accept

') + expect(out.string).to include('

unused

') expect(out.string).to include("$accept") - expect(out.string).to include("

unused

") + expect(out.string).to include('

$accept

') + expect(out.string).to include('

unused

') expect(out.string).to include("$accept") - expect(diagram.diagrams).to include("

unused

") + expect(diagram.diagrams).to include('

$accept

') + expect(diagram.diagrams).to include('

unused

') expect(diagram.diagrams).to include(" + Lrama syntax diagrams + .diagram-header { + display: inline-block; + font-weight: bold; + font-size: 18px; + margin-bottom: -8px; + text-align: center; + } + + svg { + width: 100%; + } + + svg.railroad-diagram g.non-terminal text { + cursor: pointer; + } + h2.hover-header { + background-color: #90ee90; + } + + svg.railroad-diagram g.non-terminal.hover-g rect { + fill: #eded91; + stroke: 5; + } + + svg.railroad-diagram g.terminal.hover-g rect { + fill: #eded91; + stroke: 5; + } + - + <%= output.diagrams %> + +