26#if ! defined (octave_parse_h)
27#define octave_parse_h 1
29#include "octave-config.h"
95class tree_statement_listtree_statement;
100OCTAVE_END_NAMESPACE(octave)
110 class parent_scope_info
114 typedef std::pair<symbol_scope, std::string> value_type;
116 typedef std::deque<value_type>::iterator iterator;
117 typedef std::deque<value_type>::const_iterator const_iterator;
119 typedef std::deque<value_type>::reverse_iterator reverse_iterator;
120 typedef std::deque<value_type>::const_reverse_iterator const_reverse_iterator;
122 parent_scope_info () =
delete;
125 : m_parser (
parser), m_info (), m_all_names ()
128 OCTAVE_DISABLE_COPY_MOVE (parent_scope_info)
130 ~parent_scope_info () =
default;
132 OCTINTERP_API std::size_t size ()
const;
134 OCTINTERP_API
void push (
const value_type& elt);
138 OCTINTERP_API
void pop ();
140 OCTINTERP_API
bool name_ok (
const std::string& name);
142 OCTINTERP_API
bool name_current_scope (
const std::string& name);
146 OCTINTERP_API std::string parent_name ()
const;
148 OCTINTERP_API
void clear ();
153 std::deque<value_type> m_info;
154 std::set<std::string> m_all_names;
169 OCTINTERP_API
void reset ();
173 m_classdef_object = obj;
178 return m_classdef_object;
181 OCTINTERP_API
void statement_list (std::shared_ptr<tree_statement_list>& lst);
190 m_parsing_subfunctions = flag;
195 return m_parsing_subfunctions;
200 m_parsing_local_functions = flag;
205 return m_parsing_local_functions;
210 return m_curr_fcn_depth;
215 m_endfunction_found = flag;
220 return m_endfunction_found;
231 OCTINTERP_API
bool push_fcn_symtab ();
371 make_end (
const std::string& type,
bool eof,
token *tok);
413 recover_from_parsing_function ();
461 make_classdef_superclass (
token *fqident);
573 make_identifier (
token *ident);
576 make_superclass_ref (
token *superclassref);
579 make_metaclass_query (
token *metaquery);
594 template <
typename T>
649 OCTINTERP_API
void disallow_command_syntax ();
652 OCTINTERP_API
void bison_error (
const std::string& s);
653 OCTINTERP_API
void bison_error (
const std::string& s,
const filepos& pos);
654 OCTINTERP_API
void bison_error (
const std::list<parse_exception>& pe);
655 OCTINTERP_API
void bison_error (
const parse_exception& pe);
658 parse_fcn_file (
interpreter& interp,
const std::string& full_file,
const std::string& file,
const std::string& dir_name,
const std::string& dispatch_type,
const std::string& package_name,
bool require_file,
bool force_script,
bool autoload,
bool relative_lookup);
670 OCTINTERP_API
bool validate_primary_fcn ();
749 OCTINTERP_API
void maybe_warn_assign_as_truth_value (
tree_expression *expr);
752 OCTINTERP_API
void maybe_warn_variable_switch_label (
tree_expression *expr);
761parse_fcn_file (
interpreter& interp,
const std::string& full_file,
const std::string& file,
const std::string& dir_name,
const std::string& dispatch_type,
const std::string& package_name,
bool require_file,
bool force_script,
bool autoload,
bool relative_lookup);
791 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (
parser)
795 OCTINTERP_API
int run ();
821 OCTINTERP_API
int run ();
826 OCTINTERP_API
int run (
const std::string& input,
bool eof);
832 std::shared_ptr<input_reader> m_reader;
835extern OCTINTERP_API std::string
838extern OCTINTERP_API std::string
842load_fcn_from_file (
const std::string& file_name,
const std::string& dir_name =
"",
const std::string& dispatch_type =
"",
const std::string& package_name =
"",
const std::string& fcn_name =
"",
bool autoload =
false);
844extern OCTINTERP_API
void
845source_file (
const std::string& file_name,
const std::string& context =
"",
bool verbose =
false,
bool require_file =
true);
862OCTAVE_END_NAMESPACE(octave)
std::shared_ptr< tree_statement_list > m_stmt_list
bool endfunction_found() const
bool parsing_local_functions() const
octave_value m_primary_fcn
parent_scope_info m_function_scopes
void parsing_subfunctions(bool flag)
std::shared_ptr< tree_statement_list > statement_list() const
std::string m_curr_class_name
bool m_parsing_local_functions
std::string m_curr_package_name
bool m_fcn_file_from_relative_lookup
symbol_scope m_primary_fcn_scope
int curr_fcn_depth() const
bool at_end_of_input() const
std::shared_ptr< tree_classdef > classdef_object() const
std::list< std::string > m_subfunction_names
void parsing_local_functions(bool flag)
bool parsing_subfunctions() const
bool m_parsing_subfunctions
void endfunction_found(bool flag)
base_lexer & get_lexer() const
std::shared_ptr< tree_classdef > m_classdef_object
octave_user_function * frob_function(tree_identifier *id, octave_user_function *fcn)
void classdef_object(const std::shared_ptr< tree_classdef > &obj)
std::string m_parse_error_msg
parser(const std::string &eval_string, interpreter &interp)
parser(interpreter &interp)
parser(FILE *file, interpreter &interp, std::string encoding)
parser(FILE *file, interpreter &interp)
push_parser(interpreter &interp)
push_parser(interpreter &interp, input_reader *reader)
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
octave_value parse_fcn_file(interpreter &interp, const std::string &full_file, const std::string &file, const std::string &dir_name, const std::string &dispatch_type, const std::string &package_name, bool require_file, bool force_script, bool autoload, bool relative_lookup)
octave_value_list feval(const char *name, const octave_value_list &args=octave_value_list(), int nargout=0)
Evaluate an Octave function (built-in or interpreted) and return the list of result values.
std::string get_help_from_file(const std::string &nm, bool &symbol_found, std::string &file)
octave_value load_fcn_from_file(const std::string &file_name, const std::string &dir_name="", const std::string &dispatch_type="", const std::string &package_name="", const std::string &fcn_name="", bool autoload=false)
void source_file(const std::string &file_name, const std::string &context="", bool verbose=false, bool require_file=true)