private function_parameter Parse_function_parameter() { function_parameter _self = null; List <minus> __minus = new List <minus>(); var _minus = Parse_minus(); while (_minus != null) { __minus.Add(_minus); _minus = Parse_minus();; } if (__minus.Count > 0) { _minus = new minus(__minus); } var _ident_lhs = Parse_Paren(); var _ident_rhs = Parse_Paren(); if (_ident_rhs != null && _ident_rhs.expression == "(") { _ident_rhs = null; _index--; } // this allows us to have functions with no parameters by checking for back to back of opposite direction. if (_ident_lhs != null && _ident_rhs == null) { var _parameter_sequence = Parse_parameter_sequence(); _ident_rhs = Parse_Paren(); // this checks to see if after _parameter_sequence maybe we have a closing param if ((_parameter_sequence == null && _ident_rhs != null) || (_parameter_sequence != null && _ident_rhs != null) || _minus != null) // however, if we are missing a parameter we must have a closing ) to fill out a paramless function or we may have a leading minus as in --(-6+2) { _self = new function_parameter(_minus, _ident_lhs, _parameter_sequence, _ident_rhs); } } else if (_ident_lhs != null && _ident_rhs != null) { _self = new function_parameter(_minus, _ident_lhs, null, _ident_rhs); } return(_self); }
public factor(signed_function _signed_function, function_parameter _function_parameter) { signed_function = _signed_function; function_parameter = _function_parameter; expression = signed_function?.expression + function_parameter.expression; }