sig
type position = {
start_p : CST.lexing_position;
end_p : CST.lexing_position;
}
and lexing_position =
Stdlib.Lexing.position = {
pos_fname : string;
pos_lnum : int;
pos_bol : int;
pos_cnum : int;
}
and 'a located = { value : 'a; position : CST.position; }
type program =
Program_LineBreak_CompleteCommands_LineBreak of CST.linebreak' *
CST.complete_commands' * CST.linebreak'
| Program_LineBreak of CST.linebreak'
and complete_commands =
CompleteCommands_CompleteCommands_NewlineList_CompleteCommand of
CST.complete_commands' * CST.newline_list' * CST.complete_command'
| CompleteCommands_CompleteCommand of CST.complete_command'
and complete_command =
CompleteCommand_CList_SeparatorOp of CST.clist' * CST.separator_op'
| CompleteCommand_CList of CST.clist'
and clist =
CList_CList_SeparatorOp_AndOr of CST.clist' * CST.separator_op' *
CST.and_or'
| CList_AndOr of CST.and_or'
and and_or =
AndOr_Pipeline of CST.pipeline'
| AndOr_AndOr_AndIf_LineBreak_Pipeline of CST.and_or' * CST.linebreak' *
CST.pipeline'
| AndOr_AndOr_OrIf_LineBreak_Pipeline of CST.and_or' * CST.linebreak' *
CST.pipeline'
and pipeline =
Pipeline_PipeSequence of CST.pipe_sequence'
| Pipeline_Bang_PipeSequence of CST.pipe_sequence'
and pipe_sequence =
PipeSequence_Command of CST.command'
| PipeSequence_PipeSequence_Pipe_LineBreak_Command of
CST.pipe_sequence' * CST.linebreak' * CST.command'
and command =
Command_SimpleCommand of CST.simple_command'
| Command_CompoundCommand of CST.compound_command'
| Command_CompoundCommand_RedirectList of CST.compound_command' *
CST.redirect_list'
| Command_FunctionDefinition of CST.function_definition'
and compound_command =
CompoundCommand_BraceGroup of CST.brace_group'
| CompoundCommand_Subshell of CST.subshell'
| CompoundCommand_ForClause of CST.for_clause'
| CompoundCommand_CaseClause of CST.case_clause'
| CompoundCommand_IfClause of CST.if_clause'
| CompoundCommand_WhileClause of CST.while_clause'
| CompoundCommand_UntilClause of CST.until_clause'
and subshell = Subshell_Lparen_CompoundList_Rparen of CST.compound_list'
and compound_list =
CompoundList_LineBreak_Term of CST.linebreak' * CST.term'
| CompoundList_LineBreak_Term_Separator of CST.linebreak' * CST.term' *
CST.separator'
and term =
Term_Term_Separator_AndOr of CST.term' * CST.separator' * CST.and_or'
| Term_AndOr of CST.and_or'
and for_clause =
ForClause_For_Name_DoGroup of CST.name' * CST.do_group'
| ForClause_For_Name_SequentialSep_DoGroup of CST.name' *
CST.sequential_sep' * CST.do_group'
| ForClause_For_Name_LineBreak_In_SequentialSep_DoGroup of CST.name' *
CST.linebreak' * CST.sequential_sep' * CST.do_group'
| ForClause_For_Name_LineBreak_In_WordList_SequentialSep_DoGroup of
CST.name' * CST.linebreak' * CST.wordlist' * CST.sequential_sep' *
CST.do_group'
and wordlist =
WordList_WordList_Word of CST.wordlist' * CST.word'
| WordList_Word of CST.word'
and case_clause =
CaseClause_Case_Word_LineBreak_In_LineBreak_CaseList_Esac of
CST.word' * CST.linebreak' * CST.linebreak' * CST.case_list'
| CaseClause_Case_Word_LineBreak_In_LineBreak_CaseListNS_Esac of
CST.word' * CST.linebreak' * CST.linebreak' * CST.case_list_ns'
| CaseClause_Case_Word_LineBreak_In_LineBreak_Esac of CST.word' *
CST.linebreak' * CST.linebreak'
and case_list_ns =
CaseListNS_CaseList_CaseItemNS of CST.case_list' * CST.case_item_ns'
| CaseListNS_CaseItemNS of CST.case_item_ns'
and case_list =
CaseList_CaseList_CaseItem of CST.case_list' * CST.case_item'
| CaseList_CaseItem of CST.case_item'
and case_item_ns =
CaseItemNS_Pattern_Rparen_LineBreak of CST.pattern' * CST.linebreak'
| CaseItemNS_Pattern_Rparen_CompoundList of CST.pattern' *
CST.compound_list'
| CaseItemNS_Lparen_Pattern_Rparen_LineBreak of CST.pattern' *
CST.linebreak'
| CaseItemNS_Lparen_Pattern_Rparen_CompoundList of CST.pattern' *
CST.compound_list'
and case_item =
CaseItem_Pattern_Rparen_LineBreak_Dsemi_LineBreak of CST.pattern' *
CST.linebreak' * CST.linebreak'
| CaseItem_Pattern_Rparen_CompoundList_Dsemi_LineBreak of CST.pattern' *
CST.compound_list' * CST.linebreak'
| CaseItem_Lparen_Pattern_Rparen_LineBreak_Dsemi_LineBreak of
CST.pattern' * CST.linebreak' * CST.linebreak'
| CaseItem_Lparen_Pattern_Rparen_CompoundList_Dsemi_LineBreak of
CST.pattern' * CST.compound_list' * CST.linebreak'
and pattern =
Pattern_Word of CST.word'
| Pattern_Pattern_Pipe_Word of CST.pattern' * CST.word'
and if_clause =
IfClause_If_CompoundList_Then_CompoundList_ElsePart_Fi of
CST.compound_list' * CST.compound_list' * CST.else_part'
| IfClause_If_CompoundList_Then_CompoundList_Fi of CST.compound_list' *
CST.compound_list'
and else_part =
ElsePart_Elif_CompoundList_Then_CompoundList of CST.compound_list' *
CST.compound_list'
| ElsePart_Elif_CompoundList_Then_CompoundList_ElsePart of
CST.compound_list' * CST.compound_list' * CST.else_part'
| ElsePart_Else_CompoundList of CST.compound_list'
and while_clause =
WhileClause_While_CompoundList_DoGroup of CST.compound_list' *
CST.do_group'
and until_clause =
UntilClause_Until_CompoundList_DoGroup of CST.compound_list' *
CST.do_group'
and function_definition =
FunctionDefinition_Fname_Lparen_Rparen_LineBreak_FunctionBody of
CST.fname' * CST.linebreak' * CST.function_body'
and function_body =
FunctionBody_CompoundCommand of CST.compound_command'
| FunctionBody_CompoundCommand_RedirectList of CST.compound_command' *
CST.redirect_list'
and fname = Fname_Name of CST.name
and brace_group =
BraceGroup_LBrace_CompoundList_RBrace of CST.compound_list'
and do_group = DoGroup_Do_CompoundList_Done of CST.compound_list'
and simple_command =
SimpleCommand_CmdPrefix_CmdWord_CmdSuffix of CST.cmd_prefix' *
CST.cmd_word' * CST.cmd_suffix'
| SimpleCommand_CmdPrefix_CmdWord of CST.cmd_prefix' * CST.cmd_word'
| SimpleCommand_CmdPrefix of CST.cmd_prefix'
| SimpleCommand_CmdName_CmdSuffix of CST.cmd_name' * CST.cmd_suffix'
| SimpleCommand_CmdName of CST.cmd_name'
and cmd_name = CmdName_Word of CST.word'
and cmd_word = CmdWord_Word of CST.word'
and cmd_prefix =
CmdPrefix_IoRedirect of CST.io_redirect'
| CmdPrefix_CmdPrefix_IoRedirect of CST.cmd_prefix' * CST.io_redirect'
| CmdPrefix_AssignmentWord of CST.assignment_word'
| CmdPrefix_CmdPrefix_AssignmentWord of CST.cmd_prefix' *
CST.assignment_word'
and cmd_suffix =
CmdSuffix_IoRedirect of CST.io_redirect'
| CmdSuffix_CmdSuffix_IoRedirect of CST.cmd_suffix' * CST.io_redirect'
| CmdSuffix_Word of CST.word'
| CmdSuffix_CmdSuffix_Word of CST.cmd_suffix' * CST.word'
and redirect_list =
RedirectList_IoRedirect of CST.io_redirect'
| RedirectList_RedirectList_IoRedirect of CST.redirect_list' *
CST.io_redirect'
and io_redirect =
IoRedirect_IoFile of CST.io_file'
| IoRedirect_IoNumber_IoFile of CST.io_number * CST.io_file'
| IoRedirect_IoHere of CST.io_here'
| IoRedirect_IoNumber_IoHere of CST.io_number * CST.io_here'
and io_file =
IoFile_Less_FileName of CST.filename'
| IoFile_LessAnd_FileName of CST.filename'
| IoFile_Great_FileName of CST.filename'
| IoFile_GreatAnd_FileName of CST.filename'
| IoFile_DGreat_FileName of CST.filename'
| IoFile_LessGreat_FileName of CST.filename'
| IoFile_Clobber_FileName of CST.filename'
and filename = Filename_Word of CST.word'
and io_here =
IoHere_DLess_HereEnd of CST.here_end' * CST.word' Stdlib.ref
| IoHere_DLessDash_HereEnd of CST.here_end' * CST.word' Stdlib.ref
and here_end = HereEnd_Word of CST.word'
and newline_list =
NewLineList_NewLine
| NewLineList_NewLineList_NewLine of CST.newline_list'
and linebreak =
LineBreak_NewLineList of CST.newline_list'
| LineBreak_Empty
and separator_op = SeparatorOp_Uppersand | SeparatorOp_Semicolon
and separator =
Separator_SeparatorOp_LineBreak of CST.separator_op' * CST.linebreak'
| Separator_NewLineList of CST.newline_list'
and sequential_sep =
SequentialSep_Semicolon_LineBreak of CST.linebreak'
| SequentialSep_NewLineList of CST.newline_list'
and word = Word of string * CST.word_cst
and word_cst = CST.word_component list
and word_component =
WordSubshell of CST.subshell_kind * CST.program CST.located
| WordName of string
| WordAssignmentWord of CST.assignment_word
| WordDoubleQuoted of CST.word
| WordSingleQuoted of CST.word
| WordTildePrefix of string
| WordLiteral of string
| WordVariable of CST.variable
| WordGlobAll
| WordGlobAny
| WordReBracketExpression of CST.bracket_expression
| WordEmpty
and bracket_expression =
BracketExpression_LBRACKET_MatchingList_RBRACKET of CST.matching_list
| BracketExpression_LBRACKET_NonMatchingList_RBRACKET of
CST.nonmatching_list
and matching_list = MatchingList_BracketList of CST.bracket_list
and nonmatching_list = NonMatchingList_BracketList of CST.bracket_list
and bracket_list =
BracketList_FollowList of CST.follow_list
| BracketList_FollowList_MINUS of CST.follow_list
and follow_list =
FollowList_ExpressionTerm of CST.expression_term
| FollowList_FollowList_ExpressionTerm of CST.follow_list *
CST.expression_term
and expression_term =
ExpressionTerm_SingleExpression of CST.single_expression
| ExpressionTerm_RangeExpression of CST.range_expression
and single_expression =
SingleExpression_EndRange of CST.end_range
| SingleExpression_CharacterClass of CST.character_class
| SingleExpression_EquivalenceClass of CST.equivalence_class
and range_expression =
RangeExpression_StartRange_EndRange of CST.start_range * CST.end_range
| RangeExpression_StartRange_MINUS of CST.start_range
and start_range = StartRange_EndRange_MINUS of CST.end_range
and end_range =
EndRange_COLLELEMSINGLE of char
| EndRangeCollatingSymbol of CST.collating_symbol
and collating_symbol =
CollatingSymbol_OpenDot_COLLELEMSINGLE_DotClose of char
| CollatingSymbol_OpenDot_COLLELEMMULTI_DotClose of string
| CollatingSymbol_OpenDot_METACHAR_DotClose of char
and equivalence_class =
EquivalenceClass_OpenEqual_COLLELEMSINGLE_EqualClose of char
| EquivalenceClass_OpenEqual_COLLELEMMULTI_EqualClose of string
and character_class =
CharacterClass_OpenColon_CLASSNAME_ColonClose of CST.class_name
and class_name = ClassName of string
and character_range = Range of char list
and variable = VariableAtom of string * CST.variable_attribute
and variable_attribute =
NoAttribute
| ParameterLength
| UseDefaultValues of string * CST.word
| AssignDefaultValues of string * CST.word
| IndicateErrorifNullorUnset of string * CST.word
| UseAlternativeValue of string * CST.word
| RemoveSmallestSuffixPattern of CST.word
| RemoveLargestSuffixPattern of CST.word
| RemoveSmallestPrefixPattern of CST.word
| RemoveLargestPrefixPattern of CST.word
and subshell_kind = SubShellKindBackQuote | SubShellKindParentheses
and name = Name of string
and assignment_word = CST.name * CST.word
and io_number = IONumber of string
and program' = CST.program CST.located
and complete_commands' = CST.complete_commands CST.located
and complete_command' = CST.complete_command CST.located
and clist' = CST.clist CST.located
and and_or' = CST.and_or CST.located
and pipeline' = CST.pipeline CST.located
and pipe_sequence' = CST.pipe_sequence CST.located
and command' = CST.command CST.located
and compound_command' = CST.compound_command CST.located
and subshell' = CST.subshell CST.located
and compound_list' = CST.compound_list CST.located
and term' = CST.term CST.located
and for_clause' = CST.for_clause CST.located
and wordlist' = CST.wordlist CST.located
and case_clause' = CST.case_clause CST.located
and case_list_ns' = CST.case_list_ns CST.located
and case_list' = CST.case_list CST.located
and case_item_ns' = CST.case_item_ns CST.located
and case_item' = CST.case_item CST.located
and pattern' = CST.pattern CST.located
and if_clause' = CST.if_clause CST.located
and else_part' = CST.else_part CST.located
and while_clause' = CST.while_clause CST.located
and until_clause' = CST.until_clause CST.located
and function_definition' = CST.function_definition CST.located
and function_body' = CST.function_body CST.located
and fname' = CST.fname CST.located
and brace_group' = CST.brace_group CST.located
and do_group' = CST.do_group CST.located
and simple_command' = CST.simple_command CST.located
and cmd_name' = CST.cmd_name CST.located
and cmd_word' = CST.cmd_word CST.located
and cmd_prefix' = CST.cmd_prefix CST.located
and cmd_suffix' = CST.cmd_suffix CST.located
and redirect_list' = CST.redirect_list CST.located
and io_redirect' = CST.io_redirect CST.located
and io_file' = CST.io_file CST.located
and filename' = CST.filename CST.located
and io_here' = CST.io_here CST.located
and here_end' = CST.here_end CST.located
and newline_list' = CST.newline_list CST.located
and linebreak' = CST.linebreak CST.located
and separator_op' = CST.separator_op CST.located
and separator' = CST.separator CST.located
and sequential_sep' = CST.sequential_sep CST.located
and word' = CST.word CST.located
and name' = CST.name CST.located
and assignment_word' = CST.assignment_word CST.located
end