26#if ! defined (octave_lex_h)
29#include "octave-config.h"
47extern bool iskeyword (
const std::string& s);
62 : m_interpreter (interp), m_frame_stack () { }
70 bool empty ()
const {
return m_frame_stack.empty (); }
72 std::size_t
size ()
const {
return m_frame_stack.size (); }
78 m_frame_stack.push_front (scope);
88 std::deque<symbol_scope> m_frame_stack;
110 : m_context (nl.m_context)
116 m_context = nl.m_context;
130 return ! m_context.empty () && m_context.top () == BRACKET;
133 void brace () { m_context.push (BRACE); }
137 return ! m_context.empty () && m_context.top () == BRACE;
140 void paren () { m_context.push (PAREN); }
144 return ! m_context.empty () && m_context.top () == PAREN;
151 return ! m_context.empty () && m_context.top () == ANON_FCN_BODY;
156 return (! m_context.empty ()
157 && (m_context.top () == BRACKET || m_context.top () == BRACE));
160 bool none () {
return m_context.empty (); }
164 if (! m_context.empty ())
170 while (! m_context.empty ())
176 std::stack<int> m_context;
203 m_buffer.push_front (tok);
210 delete m_buffer.back ();
211 m_buffer.pop_back ();
218 return empty () ? nullptr : m_buffer.at (n);
223 return empty () ? nullptr : m_buffer.at (n);
229 return empty () ? nullptr : m_buffer.front ();
234 return empty () ? nullptr : m_buffer.front ();
239 return empty () ? nullptr : m_buffer.back ();
244 return empty () ? nullptr : m_buffer.back ();
248 std::size_t
size ()
const {
return m_buffer.size (); }
250 bool empty ()
const {
return m_buffer.empty (); }
260 std::deque<token *> m_buffer;
540 : m_buffer (), m_offset (0), m_chars_left (0), m_eof (false)
545 void fill (
const std::string& input,
bool eof_arg);
548 int copy_chunk (
char *buf, std::size_t max_size,
bool by_lines =
false);
550 bool empty ()
const {
return m_chars_left == 0; }
556 std::string m_buffer;
557 std::size_t m_offset;
558 std::size_t m_chars_left;
568 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (
base_lexer)
576 virtual void reset ();
596 void xunput (
char c,
char *buf);
706 int handle_op (
int tok_id,
bool bos =
false,
bool compat =
true);
744 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (
lexer)
775 int fill_flex_buffer (
char *buf,
unsigned int max_size);
787template <>
int base_lexer::handle_number<2> ();
788template <>
int base_lexer::handle_number<10> ();
789template <>
int base_lexer::handle_number<16> ();
819 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (
push_lexer)
832OCTAVE_END_NAMESPACE(octave)
void maybe_warn_separator_insert(char sep)
base_lexer(interpreter &interp)
void warn_language_extension_operator(const std::string &op)
int handle_superclass_identifier()
comment_list get_comment_list()
bool at_end_of_buffer() const
void push_start_state(int state)
int handle_close_bracket(int bracket_type)
std::stack< int > start_state_stack
virtual bool is_push_lexer() const
bool inside_any_object_index()
bool at_end_of_file() const
virtual int fill_flex_buffer(char *buf, unsigned int max_size)=0
void begin_string(int state)
bool input_from_tmp_history_file()
void update_token_positions(int tok_len)
int handle_end_of_input()
virtual bool input_from_terminal() const
void maybe_warn_language_extension_comment(char c)
bool looks_like_command_arg()
bool fq_identifier_contains_keyword(const std::string &s)
void warn_deprecated_syntax(const std::string &msg)
void warn_language_extension(const std::string &msg)
void finish_comment(comment_elt::comment_type typ)
void display_start_state() const
token * make_meta_identifier_token(const std::string &cls)
void warn_language_extension_continuation()
token * make_keyword_token(const std::string &s)
virtual bool input_from_file() const
token * make_fq_identifier_token(const std::string &ident)
void fatal_error(const char *msg)
int handle_op(int tok_id, bool bos=false, bool compat=true)
virtual std::string input_source() const
int syntax_error(const std::string &msg)
int show_token(int tok_id)
int handle_token(int tok_id)
void handle_continuation()
bool maybe_unput_comma_before_unary_op(int tok_id)
void xunput(char c, char *buf)
void display_token(int tok_id)
std::size_t pending_token_count() const
virtual bool input_from_eval_string() const
void check_comment_for_hash_char(const char *txt, std::size_t len)
int count_token_internal(int tok_id)
bool whitespace_is_significant()
bool display_tokens() const
comment_list m_comment_list
void lexer_debug(const char *pattern)
void increment_token_count()
bool input_from_eval_string() const
lexer(FILE *file, interpreter &interp)
bool input_from_file() const
std::string input_source() const
lexer(interpreter &interp)
lexer(FILE *file, interpreter &interp, const std::string &encoding)
lexer(const std::string &eval_string, interpreter &interp)
bool input_from_terminal() const
bool is_bracket_or_brace()
bbp_nesting_level & operator=(const bbp_nesting_level &nl)
bbp_nesting_level(const bbp_nesting_level &nl)
~bbp_nesting_level()=default
symbol_table_context(interpreter &interp)
symbol_scope curr_scope() const
symbol_scope parent_scope() const
void push(const symbol_scope &scope)
const token * back() const
const token * front() const
token * at(std::size_t n)
const token * at(std::size_t n) const
bool m_looking_at_parameter_list
bool m_reading_classdef_file
bool previous_token_is_binop() const
bool space_follows_previous_token() const
bool m_looking_at_anon_fcn_args
std::string m_package_name
void mark_as_variables(const std::list< std::string > &lst)
bool previous_token_is_keyword() const
bool previous_token_is(int tok_id) const
bool m_arguments_is_keyword
std::string m_current_input_line
bool m_allow_command_syntax
bool m_parsing_classdef_set_method
bool m_parsing_anon_fcn_body
std::string m_comment_text
std::stack< bool > m_parsed_function_name
bool m_at_beginning_of_statement
int m_block_comment_nesting_level
bool previous_token_may_be_command() const
int m_command_arg_paren_count
std::string m_fcn_file_full_name
bool m_looking_at_return_list
bool m_parsing_classdef_get_method
std::string m_string_text
std::list< bool > m_looking_at_object_index
bool m_parsing_classdef_decl
bool m_looking_at_matrix_or_assign_lhs
bool m_parsing_classdef_superclass
lexical_feedback(interpreter &interp)
bool m_looking_for_object_index
interpreter & m_interpreter
bbp_nesting_level m_nesting_level
int previous_token_id() const
bool m_reading_script_file
bool m_classdef_element_names_are_keywords
std::size_t m_token_count
std::string m_function_text
bool m_comment_uses_hash_char
std::string m_fcn_file_name
bool m_looking_at_decl_list
symbol_table_context m_symtab_context
bool m_quote_is_transpose
bool m_parsing_class_method
void mark_previous_token_trailing_space()
bool m_buffer_function_text
void mark_as_variable(const std::string &nm)
bool m_maybe_classdef_get_set_method
bool m_looking_at_indirect_ref
int m_looking_at_function_handle
int fill_flex_buffer(char *buf, unsigned int max_size)
push_lexer(const std::string &input, bool eof, interpreter &interp)
push_lexer(interpreter &interp)
void append_input(const std::string &input, bool eof)
push_lexer(bool eof, interpreter &interp)
bool is_push_lexer() const
std::string input_source() const
push_lexer(const std::string &input, interpreter &interp)
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
bool iskeyword(const std::string &s)