package morbig

  1. Overview
  2. Docs

Module Morbig.CSTSource

Sourcetype position = {
  1. start_p : lexing_position;
  2. end_p : lexing_position;
}

The type for concrete syntax trees of POSIX shell scripts. These trees are produced by the Morbig parser.

These type definitions refer directly to the grammar production rules of the POSIX standard. We use the following convention to name data constructors: given a rule A -> P1 ... PN of the grammar, the constructor for this rule starts with the name of the non terminal A and continues with the names of producers Pi appearing in the right-hand-side of the production rule. We do not need types for operators and reserved words.

These concrete syntax trees are actually richer than the production trees defined by the grammar. Indeed, they also embed concrete syntax trees for WORDs while the grammar sees WORDs are mere tokens. For instance, echo `cat bar` is interpreted by the grammar as a simple command with two WORDs echo and `cat bar`. Morbig does not stop its work here: it also parses `cat bar` and the resulting concrete syntax tree is attached to the WORD `cat bar`. See the type definition for word below for more details.

The PPX syntax extension package "visitors", written by François Pottier, is used to macro-generate many traversal functions over this concrete syntax tree. Note that we expose the .ml file of this module because the types generated by visitors are too complex to be displayed.

Sourceand lexing_position = Lexing.position = {
  1. pos_fname : string;
  2. pos_lnum : int;
  3. pos_bol : int;
  4. pos_cnum : int;
}
Sourceand 'a located = {
  1. value : 'a;
  2. position : position;
}
include sig ... end
Sourceclass virtual +'a located_iter : object ... end
include sig ... end
Sourceclass virtual +'a located_map : object ... end
include sig ... end
Sourceclass virtual +'a located_reduce : object ... end
include sig ... end
Sourceclass virtual +'a located_mapreduce : object ... end
include sig ... end
Sourceclass virtual +'a located_iter2 : object ... end
include sig ... end
Sourceclass virtual +'a located_map2 : object ... end
include sig ... end
Sourceclass virtual +'a located_reduce2 : object ... end
Sourceval position_to_yojson : position -> Yojson.Safe.t
Sourceval lexing_position_to_yojson : lexing_position -> Yojson.Safe.t
Sourceval located_to_yojson : 'a. ('a -> Yojson.Safe.t) -> 'a located -> Yojson.Safe.t
Sourcetype program =
  1. | Program_LineBreak_CompleteCommands_LineBreak of linebreak' * complete_commands' * linebreak'
  2. | Program_LineBreak of linebreak'
Sourceand complete_commands =
  1. | CompleteCommands_CompleteCommands_NewlineList_CompleteCommand of complete_commands' * newline_list' * complete_command'
  2. | CompleteCommands_CompleteCommand of complete_command'
Sourceand complete_command =
  1. | CompleteCommand_CList_SeparatorOp of clist' * separator_op'
  2. | CompleteCommand_CList of clist'
Sourceand clist =
  1. | CList_CList_SeparatorOp_AndOr of clist' * separator_op' * and_or'
  2. | CList_AndOr of and_or'
Sourceand and_or =
  1. | AndOr_Pipeline of pipeline'
  2. | AndOr_AndOr_AndIf_LineBreak_Pipeline of and_or' * linebreak' * pipeline'
  3. | AndOr_AndOr_OrIf_LineBreak_Pipeline of and_or' * linebreak' * pipeline'
Sourceand pipeline =
  1. | Pipeline_PipeSequence of pipe_sequence'
  2. | Pipeline_Bang_PipeSequence of pipe_sequence'
Sourceand pipe_sequence =
  1. | PipeSequence_Command of command'
  2. | PipeSequence_PipeSequence_Pipe_LineBreak_Command of pipe_sequence' * linebreak' * command'
Sourceand command =
  1. | Command_SimpleCommand of simple_command'
  2. | Command_CompoundCommand of compound_command'
  3. | Command_CompoundCommand_RedirectList of compound_command' * redirect_list'
  4. | Command_FunctionDefinition of function_definition'
Sourceand compound_command =
  1. | CompoundCommand_BraceGroup of brace_group'
  2. | CompoundCommand_Subshell of subshell'
  3. | CompoundCommand_ForClause of for_clause'
  4. | CompoundCommand_CaseClause of case_clause'
  5. | CompoundCommand_IfClause of if_clause'
  6. | CompoundCommand_WhileClause of while_clause'
  7. | CompoundCommand_UntilClause of until_clause'
Sourceand subshell =
  1. | Subshell_Lparen_CompoundList_Rparen of compound_list'
Sourceand compound_list =
  1. | CompoundList_LineBreak_Term of linebreak' * term'
  2. | CompoundList_LineBreak_Term_Separator of linebreak' * term' * separator'
Sourceand term =
  1. | Term_Term_Separator_AndOr of term' * separator' * and_or'
  2. | Term_AndOr of and_or'
Sourceand for_clause =
  1. | ForClause_For_Name_DoGroup of name' * do_group'
  2. | ForClause_For_Name_SequentialSep_DoGroup of name' * sequential_sep' * do_group'
  3. | ForClause_For_Name_LineBreak_In_SequentialSep_DoGroup of name' * linebreak' * sequential_sep' * do_group'
  4. | ForClause_For_Name_LineBreak_In_WordList_SequentialSep_DoGroup of name' * linebreak' * wordlist' * sequential_sep' * do_group'
Sourceand wordlist =
  1. | WordList_WordList_Word of wordlist' * word'
  2. | WordList_Word of word'
Sourceand case_clause =
  1. | CaseClause_Case_Word_LineBreak_In_LineBreak_CaseList_Esac of word' * linebreak' * linebreak' * case_list'
  2. | CaseClause_Case_Word_LineBreak_In_LineBreak_CaseListNS_Esac of word' * linebreak' * linebreak' * case_list_ns'
  3. | CaseClause_Case_Word_LineBreak_In_LineBreak_Esac of word' * linebreak' * linebreak'
Sourceand case_list_ns =
  1. | CaseListNS_CaseList_CaseItemNS of case_list' * case_item_ns'
  2. | CaseListNS_CaseItemNS of case_item_ns'
Sourceand case_list =
  1. | CaseList_CaseList_CaseItem of case_list' * case_item'
  2. | CaseList_CaseItem of case_item'
Sourceand case_item_ns =
  1. | CaseItemNS_Pattern_Rparen_LineBreak of pattern' * linebreak'
  2. | CaseItemNS_Pattern_Rparen_CompoundList of pattern' * compound_list'
  3. | CaseItemNS_Lparen_Pattern_Rparen_LineBreak of pattern' * linebreak'
  4. | CaseItemNS_Lparen_Pattern_Rparen_CompoundList of pattern' * compound_list'
Sourceand case_item =
  1. | CaseItem_Pattern_Rparen_LineBreak_Dsemi_LineBreak of pattern' * linebreak' * linebreak'
  2. | CaseItem_Pattern_Rparen_CompoundList_Dsemi_LineBreak of pattern' * compound_list' * linebreak'
  3. | CaseItem_Lparen_Pattern_Rparen_LineBreak_Dsemi_LineBreak of pattern' * linebreak' * linebreak'
  4. | CaseItem_Lparen_Pattern_Rparen_CompoundList_Dsemi_LineBreak of pattern' * compound_list' * linebreak'
Sourceand pattern =
  1. | Pattern_Word of word'
  2. | Pattern_Pattern_Pipe_Word of pattern' * word'
Sourceand if_clause =
  1. | IfClause_If_CompoundList_Then_CompoundList_ElsePart_Fi of compound_list' * compound_list' * else_part'
  2. | IfClause_If_CompoundList_Then_CompoundList_Fi of compound_list' * compound_list'
Sourceand else_part =
  1. | ElsePart_Elif_CompoundList_Then_CompoundList of compound_list' * compound_list'
  2. | ElsePart_Elif_CompoundList_Then_CompoundList_ElsePart of compound_list' * compound_list' * else_part'
  3. | ElsePart_Else_CompoundList of compound_list'
Sourceand while_clause =
  1. | WhileClause_While_CompoundList_DoGroup of compound_list' * do_group'
Sourceand until_clause =
  1. | UntilClause_Until_CompoundList_DoGroup of compound_list' * do_group'
Sourceand function_definition =
  1. | FunctionDefinition_Fname_Lparen_Rparen_LineBreak_FunctionBody of fname' * linebreak' * function_body'
Sourceand function_body =
  1. | FunctionBody_CompoundCommand of compound_command'
  2. | FunctionBody_CompoundCommand_RedirectList of compound_command' * redirect_list'
Sourceand fname =
  1. | Fname_Name of name
Sourceand brace_group =
  1. | BraceGroup_LBrace_CompoundList_RBrace of compound_list'
Sourceand do_group =
  1. | DoGroup_Do_CompoundList_Done of compound_list'
Sourceand simple_command =
  1. | SimpleCommand_CmdPrefix_CmdWord_CmdSuffix of cmd_prefix' * cmd_word' * cmd_suffix'
  2. | SimpleCommand_CmdPrefix_CmdWord of cmd_prefix' * cmd_word'
  3. | SimpleCommand_CmdPrefix of cmd_prefix'
  4. | SimpleCommand_CmdName_CmdSuffix of cmd_name' * cmd_suffix'
  5. | SimpleCommand_CmdName of cmd_name'
Sourceand cmd_name =
  1. | CmdName_Word of word'
Sourceand cmd_word =
  1. | CmdWord_Word of word'
Sourceand cmd_prefix =
  1. | CmdPrefix_IoRedirect of io_redirect'
  2. | CmdPrefix_CmdPrefix_IoRedirect of cmd_prefix' * io_redirect'
  3. | CmdPrefix_AssignmentWord of assignment_word'
  4. | CmdPrefix_CmdPrefix_AssignmentWord of cmd_prefix' * assignment_word'
Sourceand cmd_suffix =
  1. | CmdSuffix_IoRedirect of io_redirect'
  2. | CmdSuffix_CmdSuffix_IoRedirect of cmd_suffix' * io_redirect'
  3. | CmdSuffix_Word of word'
  4. | CmdSuffix_CmdSuffix_Word of cmd_suffix' * word'
Sourceand redirect_list =
  1. | RedirectList_IoRedirect of io_redirect'
  2. | RedirectList_RedirectList_IoRedirect of redirect_list' * io_redirect'
Sourceand io_redirect =
  1. | IoRedirect_IoFile of io_file'
  2. | IoRedirect_IoNumber_IoFile of io_number * io_file'
  3. | IoRedirect_IoHere of io_here'
  4. | IoRedirect_IoNumber_IoHere of io_number * io_here'
Sourceand io_file =
  1. | IoFile_Less_FileName of filename'
  2. | IoFile_LessAnd_FileName of filename'
  3. | IoFile_Great_FileName of filename'
  4. | IoFile_GreatAnd_FileName of filename'
  5. | IoFile_DGreat_FileName of filename'
  6. | IoFile_LessGreat_FileName of filename'
  7. | IoFile_Clobber_FileName of filename'
Sourceand filename =
  1. | Filename_Word of word'
Sourceand io_here =
  1. | IoHere_DLess_HereEnd of here_end' * word' ref
  2. | IoHere_DLessDash_HereEnd of here_end' * word' ref

The two IoHere constructors have two arguments. The second argument is the word holding the contents of the here document, which does not figure in the grammar.

Sourceand here_end =
  1. | HereEnd_Word of word'
Sourceand newline_list =
  1. | NewLineList_NewLine
  2. | NewLineList_NewLineList_NewLine of newline_list'
Sourceand linebreak =
  1. | LineBreak_NewLineList of newline_list'
  2. | LineBreak_Empty
Sourceand separator_op =
  1. | SeparatorOp_Uppersand
  2. | SeparatorOp_Semicolon
Sourceand separator =
  1. | Separator_SeparatorOp_LineBreak of separator_op' * linebreak'
  2. | Separator_NewLineList of newline_list'
Sourceand sequential_sep =
  1. | SequentialSep_Semicolon_LineBreak of linebreak'
  2. | SequentialSep_NewLineList of newline_list'
Sourceand word =
  1. | Word of string * word_cst
Sourceand word_cst = word_component list
Sourceand word_component =
  1. | WordSubshell of subshell_kind * program located
  2. | WordName of string
  3. | WordAssignmentWord of assignment_word
  4. | WordDoubleQuoted of word
  5. | WordSingleQuoted of word
  6. | WordLiteral of string
  7. | WordVariable of variable
  8. | WordGlobAll
  9. | WordGlobAny
  10. | WordReBracketExpression of bracket_expression
  11. | WordEmpty
Sourceand bracket_expression =
  1. | BracketExpression_LBRACKET_MatchingList_RBRACKET of matching_list
  2. | BracketExpression_LBRACKET_NonMatchingList_RBRACKET of nonmatching_list
Sourceand matching_list =
  1. | MatchingList_BracketList of bracket_list
Sourceand nonmatching_list =
  1. | NonMatchingList_BracketList of bracket_list
Sourceand bracket_list =
  1. | BracketList_FollowList of follow_list
  2. | BracketList_FollowList_MINUS of follow_list
Sourceand follow_list =
  1. | FollowList_ExpressionTerm of expression_term
  2. | FollowList_FollowList_ExpressionTerm of follow_list * expression_term
Sourceand expression_term =
  1. | ExpressionTerm_SingleExpression of single_expression
  2. | ExpressionTerm_RangeExpression of range_expression
Sourceand single_expression =
  1. | SingleExpression_EndRange of end_range
  2. | SingleExpression_CharacterClass of character_class
  3. | SingleExpression_EquivalenceClass of equivalence_class
Sourceand range_expression =
  1. | RangeExpression_StartRange_EndRange of start_range * end_range
  2. | RangeExpression_StartRange_MINUS of start_range
Sourceand start_range =
  1. | StartRange_EndRange_MINUS of end_range
Sourceand end_range =
  1. | EndRange_COLLELEMSINGLE of char
  2. | EndRangeCollatingSymbol of collating_symbol
Sourceand collating_symbol =
  1. | CollatingSymbol_OpenDot_COLLELEMSINGLE_DotClose of char
  2. | CollatingSymbol_OpenDot_COLLELEMMULTI_DotClose of string
  3. | CollatingSymbol_OpenDot_METACHAR_DotClose of char
Sourceand equivalence_class =
  1. | EquivalenceClass_OpenEqual_COLLELEMSINGLE_EqualClose of char
  2. | EquivalenceClass_OpenEqual_COLLELEMMULTI_EqualClose of string
Sourceand character_class =
  1. | CharacterClass_OpenColon_CLASSNAME_ColonClose of class_name
Sourceand class_name =
  1. | ClassName of string
Sourceand character_range =
  1. | Range of char list
Sourceand variable =
  1. | VariableAtom of string * variable_attribute
Sourceand variable_attribute =
  1. | NoAttribute
  2. | ParameterLength of word
  3. | UseDefaultValues of string * word
  4. | AssignDefaultValues of string * word
  5. | IndicateErrorifNullorUnset of string * word
  6. | UseAlternativeValue of string * word
  7. | RemoveSmallestSuffixPattern of word
  8. | RemoveLargestSuffixPattern of word
  9. | RemoveSmallestPrefixPattern of word
  10. | RemoveLargestPrefixPattern of word
Sourceand subshell_kind =
  1. | SubShellKindBackQuote
  2. | SubShellKindParentheses
Sourceand name =
  1. | Name of string
Sourceand assignment_word = name * word
Sourceand io_number =
  1. | IONumber of string
Sourceand program' = program located
Sourceand complete_commands' = complete_commands located
Sourceand complete_command' = complete_command located
Sourceand clist' = clist located
Sourceand and_or' = and_or located
Sourceand pipeline' = pipeline located
Sourceand pipe_sequence' = pipe_sequence located
Sourceand command' = command located
Sourceand compound_command' = compound_command located
Sourceand subshell' = subshell located
Sourceand compound_list' = compound_list located
Sourceand term' = term located
Sourceand for_clause' = for_clause located
Sourceand wordlist' = wordlist located
Sourceand case_clause' = case_clause located
Sourceand case_list_ns' = case_list_ns located
Sourceand case_list' = case_list located
Sourceand case_item_ns' = case_item_ns located
Sourceand case_item' = case_item located
Sourceand pattern' = pattern located
Sourceand if_clause' = if_clause located
Sourceand else_part' = else_part located
Sourceand while_clause' = while_clause located
Sourceand until_clause' = until_clause located
Sourceand function_definition' = function_definition located
Sourceand function_body' = function_body located
Sourceand fname' = fname located
Sourceand brace_group' = brace_group located
Sourceand do_group' = do_group located
Sourceand simple_command' = simple_command located
Sourceand cmd_name' = cmd_name located
Sourceand cmd_word' = cmd_word located
Sourceand cmd_prefix' = cmd_prefix located
Sourceand cmd_suffix' = cmd_suffix located
Sourceand redirect_list' = redirect_list located
Sourceand io_redirect' = io_redirect located
Sourceand io_file' = io_file located
Sourceand filename' = filename located
Sourceand io_here' = io_here located
Sourceand here_end' = here_end located
Sourceand newline_list' = newline_list located
Sourceand linebreak' = linebreak located
Sourceand separator_op' = separator_op located
Sourceand separator' = separator located
Sourceand sequential_sep' = sequential_sep located
Sourceand word' = word located
Sourceand name' = name located
Sourceand assignment_word' = assignment_word located
include sig ... end
Sourceclass virtual +'a iter : object ... end
include sig ... end
Sourceclass virtual +'a map : object ... end
include sig ... end
Sourceclass virtual +'a reduce : object ... end
include sig ... end
Sourceclass virtual +'a mapreduce : object ... end
include sig ... end
Sourceclass virtual +'a iter2 : object ... end
include sig ... end
Sourceclass virtual +'a map2 : object ... end
include sig ... end
Sourceclass virtual +'a reduce2 : object ... end
Sourceval program_to_yojson : program -> Yojson.Safe.t
Sourceval complete_commands_to_yojson : complete_commands -> Yojson.Safe.t
Sourceval complete_command_to_yojson : complete_command -> Yojson.Safe.t
Sourceval clist_to_yojson : clist -> Yojson.Safe.t
Sourceval and_or_to_yojson : and_or -> Yojson.Safe.t
Sourceval pipeline_to_yojson : pipeline -> Yojson.Safe.t
Sourceval pipe_sequence_to_yojson : pipe_sequence -> Yojson.Safe.t
Sourceval command_to_yojson : command -> Yojson.Safe.t
Sourceval compound_command_to_yojson : compound_command -> Yojson.Safe.t
Sourceval subshell_to_yojson : subshell -> Yojson.Safe.t
Sourceval compound_list_to_yojson : compound_list -> Yojson.Safe.t
Sourceval term_to_yojson : term -> Yojson.Safe.t
Sourceval for_clause_to_yojson : for_clause -> Yojson.Safe.t
Sourceval wordlist_to_yojson : wordlist -> Yojson.Safe.t
Sourceval case_clause_to_yojson : case_clause -> Yojson.Safe.t
Sourceval case_list_ns_to_yojson : case_list_ns -> Yojson.Safe.t
Sourceval case_list_to_yojson : case_list -> Yojson.Safe.t
Sourceval case_item_ns_to_yojson : case_item_ns -> Yojson.Safe.t
Sourceval case_item_to_yojson : case_item -> Yojson.Safe.t
Sourceval pattern_to_yojson : pattern -> Yojson.Safe.t
Sourceval if_clause_to_yojson : if_clause -> Yojson.Safe.t
Sourceval else_part_to_yojson : else_part -> Yojson.Safe.t
Sourceval while_clause_to_yojson : while_clause -> Yojson.Safe.t
Sourceval until_clause_to_yojson : until_clause -> Yojson.Safe.t
Sourceval function_definition_to_yojson : function_definition -> Yojson.Safe.t
Sourceval function_body_to_yojson : function_body -> Yojson.Safe.t
Sourceval fname_to_yojson : fname -> Yojson.Safe.t
Sourceval brace_group_to_yojson : brace_group -> Yojson.Safe.t
Sourceval do_group_to_yojson : do_group -> Yojson.Safe.t
Sourceval simple_command_to_yojson : simple_command -> Yojson.Safe.t
Sourceval cmd_name_to_yojson : cmd_name -> Yojson.Safe.t
Sourceval cmd_word_to_yojson : cmd_word -> Yojson.Safe.t
Sourceval cmd_prefix_to_yojson : cmd_prefix -> Yojson.Safe.t
Sourceval cmd_suffix_to_yojson : cmd_suffix -> Yojson.Safe.t
Sourceval redirect_list_to_yojson : redirect_list -> Yojson.Safe.t
Sourceval io_redirect_to_yojson : io_redirect -> Yojson.Safe.t
Sourceval io_file_to_yojson : io_file -> Yojson.Safe.t
Sourceval filename_to_yojson : filename -> Yojson.Safe.t
Sourceval io_here_to_yojson : io_here -> Yojson.Safe.t
Sourceval here_end_to_yojson : here_end -> Yojson.Safe.t
Sourceval newline_list_to_yojson : newline_list -> Yojson.Safe.t
Sourceval linebreak_to_yojson : linebreak -> Yojson.Safe.t
Sourceval separator_op_to_yojson : separator_op -> Yojson.Safe.t
Sourceval separator_to_yojson : separator -> Yojson.Safe.t
Sourceval sequential_sep_to_yojson : sequential_sep -> Yojson.Safe.t
Sourceval word_to_yojson : word -> Yojson.Safe.t
Sourceval word_cst_to_yojson : word_cst -> Yojson.Safe.t
Sourceval word_component_to_yojson : word_component -> Yojson.Safe.t
Sourceval bracket_expression_to_yojson : bracket_expression -> Yojson.Safe.t
Sourceval matching_list_to_yojson : matching_list -> Yojson.Safe.t
Sourceval nonmatching_list_to_yojson : nonmatching_list -> Yojson.Safe.t
Sourceval bracket_list_to_yojson : bracket_list -> Yojson.Safe.t
Sourceval follow_list_to_yojson : follow_list -> Yojson.Safe.t
Sourceval expression_term_to_yojson : expression_term -> Yojson.Safe.t
Sourceval single_expression_to_yojson : single_expression -> Yojson.Safe.t
Sourceval range_expression_to_yojson : range_expression -> Yojson.Safe.t
Sourceval start_range_to_yojson : start_range -> Yojson.Safe.t
Sourceval end_range_to_yojson : end_range -> Yojson.Safe.t
Sourceval collating_symbol_to_yojson : collating_symbol -> Yojson.Safe.t
Sourceval equivalence_class_to_yojson : equivalence_class -> Yojson.Safe.t
Sourceval character_class_to_yojson : character_class -> Yojson.Safe.t
Sourceval class_name_to_yojson : class_name -> Yojson.Safe.t
Sourceval character_range_to_yojson : character_range -> Yojson.Safe.t
Sourceval variable_to_yojson : variable -> Yojson.Safe.t
Sourceval variable_attribute_to_yojson : variable_attribute -> Yojson.Safe.t
Sourceval subshell_kind_to_yojson : subshell_kind -> Yojson.Safe.t
Sourceval name_to_yojson : name -> Yojson.Safe.t
Sourceval assignment_word_to_yojson : assignment_word -> Yojson.Safe.t
Sourceval io_number_to_yojson : io_number -> Yojson.Safe.t
Sourceval program'_to_yojson : program' -> Yojson.Safe.t
Sourceval complete_commands'_to_yojson : complete_commands' -> Yojson.Safe.t
Sourceval complete_command'_to_yojson : complete_command' -> Yojson.Safe.t
Sourceval clist'_to_yojson : clist' -> Yojson.Safe.t
Sourceval and_or'_to_yojson : and_or' -> Yojson.Safe.t
Sourceval pipeline'_to_yojson : pipeline' -> Yojson.Safe.t
Sourceval pipe_sequence'_to_yojson : pipe_sequence' -> Yojson.Safe.t
Sourceval command'_to_yojson : command' -> Yojson.Safe.t
Sourceval compound_command'_to_yojson : compound_command' -> Yojson.Safe.t
Sourceval subshell'_to_yojson : subshell' -> Yojson.Safe.t
Sourceval compound_list'_to_yojson : compound_list' -> Yojson.Safe.t
Sourceval term'_to_yojson : term' -> Yojson.Safe.t
Sourceval for_clause'_to_yojson : for_clause' -> Yojson.Safe.t
Sourceval wordlist'_to_yojson : wordlist' -> Yojson.Safe.t
Sourceval case_clause'_to_yojson : case_clause' -> Yojson.Safe.t
Sourceval case_list_ns'_to_yojson : case_list_ns' -> Yojson.Safe.t
Sourceval case_list'_to_yojson : case_list' -> Yojson.Safe.t
Sourceval case_item_ns'_to_yojson : case_item_ns' -> Yojson.Safe.t
Sourceval case_item'_to_yojson : case_item' -> Yojson.Safe.t
Sourceval pattern'_to_yojson : pattern' -> Yojson.Safe.t
Sourceval if_clause'_to_yojson : if_clause' -> Yojson.Safe.t
Sourceval else_part'_to_yojson : else_part' -> Yojson.Safe.t
Sourceval while_clause'_to_yojson : while_clause' -> Yojson.Safe.t
Sourceval until_clause'_to_yojson : until_clause' -> Yojson.Safe.t
Sourceval function_definition'_to_yojson : function_definition' -> Yojson.Safe.t
Sourceval function_body'_to_yojson : function_body' -> Yojson.Safe.t
Sourceval fname'_to_yojson : fname' -> Yojson.Safe.t
Sourceval brace_group'_to_yojson : brace_group' -> Yojson.Safe.t
Sourceval do_group'_to_yojson : do_group' -> Yojson.Safe.t
Sourceval simple_command'_to_yojson : simple_command' -> Yojson.Safe.t
Sourceval cmd_name'_to_yojson : cmd_name' -> Yojson.Safe.t
Sourceval cmd_word'_to_yojson : cmd_word' -> Yojson.Safe.t
Sourceval cmd_prefix'_to_yojson : cmd_prefix' -> Yojson.Safe.t
Sourceval cmd_suffix'_to_yojson : cmd_suffix' -> Yojson.Safe.t
Sourceval redirect_list'_to_yojson : redirect_list' -> Yojson.Safe.t
Sourceval io_redirect'_to_yojson : io_redirect' -> Yojson.Safe.t
Sourceval io_file'_to_yojson : io_file' -> Yojson.Safe.t
Sourceval filename'_to_yojson : filename' -> Yojson.Safe.t
Sourceval io_here'_to_yojson : io_here' -> Yojson.Safe.t
Sourceval here_end'_to_yojson : here_end' -> Yojson.Safe.t
Sourceval newline_list'_to_yojson : newline_list' -> Yojson.Safe.t
Sourceval linebreak'_to_yojson : linebreak' -> Yojson.Safe.t
Sourceval separator_op'_to_yojson : separator_op' -> Yojson.Safe.t
Sourceval separator'_to_yojson : separator' -> Yojson.Safe.t
Sourceval sequential_sep'_to_yojson : sequential_sep' -> Yojson.Safe.t
Sourceval word'_to_yojson : word' -> Yojson.Safe.t
Sourceval name'_to_yojson : name' -> Yojson.Safe.t
Sourceval assignment_word'_to_yojson : assignment_word' -> Yojson.Safe.t