comparison libinterp/parse-tree/lex.ll @ 25443:2fa7cd178c4a

new class for miscellaneous interpreter settings * libgui/src/editor-settings.h: Rename from octave-settings.h. Change all uses. * libgui/src/module.mk: Update. * settings.h, settings.cc: New files for miscellaneous interpreter settings and access functions. * libinterp/corefcn/module.mk: Update. * lex.h, lex.ll: Move static variables Vdisplay_tokens, Vtoken_count, and lexer_debug_flag to new settings class. Change all uses. (base_lexer::debug_flag, base_lexer::display_tokens, base_lexer::increment_token_count, base_lexer::lexer_debug): New functions. (F__display_tokens__, F__token_count__, F__lexer_debug_flag__): Move to settings.cc. * interpreter.h, interpreter.cc (interpreter::m_settings, interpreter::settings): New data member and access function.
author John W. Eaton <jwe@octave.org>
date Fri, 08 Jun 2018 18:04:18 -0400
parents 6652d3823428
children 4d565baa475e
comparison
equal deleted inserted replaced
25442:47a3e4b9b6fe 25443:2fa7cd178c4a
320 return curr_lexer->count_token_internal (id_tok); \ 320 return curr_lexer->count_token_internal (id_tok); \
321 } \ 321 } \
322 } \ 322 } \
323 } \ 323 } \
324 while (0) 324 while (0)
325
326 static bool Vdisplay_tokens = false;
327
328 static unsigned int Vtoken_count = 0;
329
330 // Internal variable for lexer debugging state.
331 static bool lexer_debug_flag = false;
332 325
333 %} 326 %}
334 327
335 D [0-9] 328 D [0-9]
336 D_ [0-9_] 329 D_ [0-9_]
2033 2026
2034 %!error iskeyword ("A", "B") 2027 %!error iskeyword ("A", "B")
2035 %!error <NAME must be a string> iskeyword (1) 2028 %!error <NAME must be a string> iskeyword (1)
2036 2029
2037 */ 2030 */
2038
2039 DEFUN (__display_tokens__, args, nargout,
2040 doc: /* -*- texinfo -*-
2041 @deftypefn {} {} __display_tokens__ ()
2042 Query or set the internal variable that determines whether Octave's
2043 lexer displays tokens as they are read.
2044 @seealso{__lexer_debug_flag__, __token_count__}
2045 @end deftypefn */)
2046 {
2047 return SET_INTERNAL_VARIABLE (display_tokens);
2048 }
2049
2050 DEFUN (__token_count__, , ,
2051 doc: /* -*- texinfo -*-
2052 @deftypefn {} {} __token_count__ ()
2053 Return the number of language tokens processed since Octave startup.
2054 @seealso{__lexer_debug_flag__, __display_tokens__}
2055 @end deftypefn */)
2056 {
2057 return octave_value (Vtoken_count);
2058 }
2059
2060 DEFUN (__lexer_debug_flag__, args, nargout,
2061 doc: /* -*- texinfo -*-
2062 @deftypefn {} {@var{val} =} __lexer_debug_flag__ ()
2063 @deftypefnx {} {@var{old_val} =} __lexer_debug_flag__ (@var{new_val})
2064 Query or set the internal flag that determines whether Octave's lexer prints
2065 debug information as it processes an expression.
2066 @seealso{__display_tokens__, __token_count__, __parse_debug_flag__}
2067 @end deftypefn */)
2068 {
2069 octave_value retval;
2070
2071 retval = set_internal_variable (lexer_debug_flag, args, nargout,
2072 "__lexer_debug_flag__");
2073
2074 return retval;
2075 }
2076 2031
2077 namespace octave 2032 namespace octave
2078 { 2033 {
2079 void 2034 void
2080 lexical_feedback::symbol_table_context::clear (void) 2035 lexical_feedback::symbol_table_context::clear (void)
2436 int 2391 int
2437 base_lexer::text_yyinput (void) 2392 base_lexer::text_yyinput (void)
2438 { 2393 {
2439 int c = yyinput (m_scanner); 2394 int c = yyinput (m_scanner);
2440 2395
2441 if (lexer_debug_flag) 2396 if (debug_flag ())
2442 { 2397 {
2443 std::cerr << "I: "; 2398 std::cerr << "I: ";
2444 display_character (c); 2399 display_character (c);
2445 std::cerr << std::endl; 2400 std::cerr << std::endl;
2446 } 2401 }
2449 2404
2450 if (c == '\r') 2405 if (c == '\r')
2451 { 2406 {
2452 c = yyinput (m_scanner); 2407 c = yyinput (m_scanner);
2453 2408
2454 if (lexer_debug_flag) 2409 if (debug_flag ())
2455 { 2410 {
2456 std::cerr << "I: "; 2411 std::cerr << "I: ";
2457 display_character (c); 2412 display_character (c);
2458 std::cerr << std::endl; 2413 std::cerr << std::endl;
2459 } 2414 }
2471 void 2426 void
2472 base_lexer::xunput (char c, char *buf) 2427 base_lexer::xunput (char c, char *buf)
2473 { 2428 {
2474 if (c != EOF) 2429 if (c != EOF)
2475 { 2430 {
2476 if (lexer_debug_flag) 2431 if (debug_flag ())
2477 { 2432 {
2478 std::cerr << "U: "; 2433 std::cerr << "U: ";
2479 display_character (c); 2434 display_character (c);
2480 std::cerr << std::endl; 2435 std::cerr << std::endl;
2481 } 2436 }
3405 base_lexer::fatal_error (const char *msg) 3360 base_lexer::fatal_error (const char *msg)
3406 { 3361 {
3407 error ("fatal lexer error: %s", msg); 3362 error ("fatal lexer error: %s", msg);
3408 } 3363 }
3409 3364
3365 bool
3366 base_lexer::debug_flag (void) const
3367 {
3368 settings& stgs = m_interpreter.get_settings ();
3369 return stgs.lexer_debug_flag ();
3370 }
3371
3372 bool
3373 base_lexer::display_tokens (void) const
3374 {
3375 settings& stgs = m_interpreter.get_settings ();
3376 return stgs.display_tokens ();
3377 }
3378
3379 void
3380 base_lexer::increment_token_count (void)
3381 {
3382 settings& stgs = m_interpreter.get_settings ();
3383 stgs.increment_token_count ();
3384
3385 m_token_count++;
3386 }
3387
3410 void 3388 void
3411 base_lexer::lexer_debug (const char *pattern) 3389 base_lexer::lexer_debug (const char *pattern)
3412 { 3390 {
3413 if (lexer_debug_flag) 3391 if (debug_flag ())
3414 { 3392 {
3415 std::cerr << std::endl; 3393 std::cerr << std::endl;
3416 3394
3417 display_start_state (); 3395 display_start_state ();
3418 3396
3598 3576
3599 int 3577 int
3600 base_lexer::count_token_internal (int tok) 3578 base_lexer::count_token_internal (int tok)
3601 { 3579 {
3602 if (tok != '\n') 3580 if (tok != '\n')
3603 { 3581 increment_token_count ();
3604 Vtoken_count++;
3605 m_token_count++;
3606 }
3607 3582
3608 return show_token (tok); 3583 return show_token (tok);
3609 } 3584 }
3610 3585
3611 int 3586 int
3612 base_lexer::show_token (int tok) 3587 base_lexer::show_token (int tok)
3613 { 3588 {
3614 if (Vdisplay_tokens) 3589
3590 if (display_tokens ())
3615 display_token (tok); 3591 display_token (tok);
3616 3592
3617 if (lexer_debug_flag) 3593 if (debug_flag ())
3618 { 3594 {
3619 std::cerr << "R: "; 3595 std::cerr << "R: ";
3620 display_token (tok); 3596 display_token (tok);
3621 std::cerr << std::endl; 3597 std::cerr << std::endl;
3622 } 3598 }