Mercurial > octave
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 } |