diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2018-02-21 20:06:07 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2018-02-21 20:06:07 (GMT) |
commit | 7521ef7312a93f34af0f5ee261cc4436478b4c5b (patch) | |
tree | 2e1c802fe52b748ea2af36bbbba3c6698fac0d89 /fickle | |
parent | 65ee41b9166635ea57f2ee22618bc5e86b6df003 (diff) | |
download | blt-7521ef7312a93f34af0f5ee261cc4436478b4c5b.zip blt-7521ef7312a93f34af0f5ee261cc4436478b4c5b.tar.gz blt-7521ef7312a93f34af0f5ee261cc4436478b4c5b.tar.bz2 |
add namespace
Diffstat (limited to 'fickle')
-rw-r--r-- | fickle/fickle.tcl | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/fickle/fickle.tcl b/fickle/fickle.tcl index f346cbc..f78f752 100644 --- a/fickle/fickle.tcl +++ b/fickle/fickle.tcl @@ -326,6 +326,8 @@ proc write_scanner_utils {} { puts $::dest "namespace eval ${::p} \{ variable yytext {} variable yyleng 0 + variable yy_buffer {} + variable yy_index 0 variable yy_done 0 variable yyin stdin variable yyout stdout" @@ -372,10 +374,12 @@ proc write_scanner_utils {} { # -- from the flex(1) man page" } puts $::dest "proc ${::p}::YY_FLUSH_BUFFER \{\} \{ + variable yy_buffer + variable yy_index variable yy_done - set ::${::p}_buffer \"\" - set ::${::p}_index 0 + set yy_buffer \"\" + set yy_index 0 set yy_done 0 \} " @@ -432,9 +436,10 @@ proc write_scanner_utils {} { # -- from the flex(1) man page" } puts $::dest "proc ${::p}::yy_scan_string \{str\} \{ + variable yy_buffer variable yyin - append ::${::p}_buffer \$str + append yy_buffer \$str set yyin \"\" \} " @@ -444,25 +449,30 @@ proc write_scanner_utils {} { # -- from the flex(1) man page" } puts $::dest "proc ${::p}::yyunput \{c\} \{ - set s \[string range \$::${::p}_buffer 0 \[expr \{\$::${::p}_index - 1\}\]\] + variable yy_buffer + variable yy_index + + set s \[string range \$yy_buffer 0 \[expr \{\$yy_index - 1\}\]\] append s \$c - set ::${::p}_buffer \[append s \[string range \$::${::p}_buffer \$::${::p}_index end\]\] + set yy_buffer \[append s \[string range \$yy_buffer \$yy_index end\]\] \} " if $::headers { puts $::dest "# Returns all but the first n characters of the current token back to # the input stream, where they will be rescanned when the scanner -# looks for the next match. yytext and ${::p}leng are adjusted +# looks for the next match. yytext and yyleng are adjusted # appropriately. # -- from the flex(1) man page" } puts $::dest "proc ${::p}::yyless \{n\} \{ + variable yy_buffer + variable yy_index variable yytext variable yyleng - set s \[string range \$::${::p}_buffer 0 \[expr \{\$::${::p}_index - 1\}\]\] + set s \[string range \$yy_buffer 0 \[expr \{\$yy_index - 1\}\]\] append s \[string range \$yytext \$n end\] - set ::${::p}_buffer \[append s \[string range \$::${::p}_buffer \$::${::p}_index end\]\] + set yy_buffer \[append s \[string range \$yy_buffer \$yy_index end\]\] set yytext \[string range \$yytext 0 \[expr \{\$n - 1\}\]\] set yyleng \[string length \$yytext\] \} @@ -472,13 +482,15 @@ proc write_scanner_utils {} { # -- from the flex(1) man page" } puts $::dest "proc ${::p}::yyinput \{\} \{ + variable yy_buffer + variable yy_index variable yy_done - if \{\[string length \$::${::p}_buffer\] - \$::${::p}_index < $::BUFFER_SIZE\} \{ + if \{\[string length \$yy_buffer\] - \$yy_index < $::BUFFER_SIZE\} \{ set new_buffer_size 0 if \{\$yy_done == 0\} \{ YY_INPUT new_buffer new_buffer_size $::BUFFER_SIZE - append ::${::p}_buffer \$new_buffer + append yy_buffer \$new_buffer if \{\$new_buffer_size == 0\} \{ set yy_done 1 \} @@ -491,13 +503,13 @@ proc write_scanner_utils {} { } else { puts -nonewline $::dest " " } - puts $::dest "if \{\[string length \$::${::p}_buffer\] - \$::${::p}_index == 0\} \{ + puts $::dest "if \{\[string length \$yy_buffer\] - \$yy_index == 0\} \{ return \{\} \} \} \} - set c \[string index \$::${::p}_buffer \$::${::p}_index\] - incr ::${::p}_index + set c \[string index \$yy_buffer \$yy_index\] + incr yy_index return \$c \} " @@ -549,9 +561,6 @@ proc write_scanner_utils {} { " } - puts $::dest "# initialize values used by the lexer -set ::${::p}_buffer \{\} -set ::${::p}_index 0" if $::startstates { puts $::dest "set ::${::p}_state_stack \{\} ${::p}::BEGIN INITIAL @@ -571,7 +580,7 @@ array set ::${::p}_state_table \{[array get ::state_table]\}" # was given at the command line. proc write_scanner {} { puts $::dest "###### -# autogenerated ${::p}lex function created by fickle +# autogenerated yylex function created by fickle ###### # Whenever yylex() is called, it scans tokens from the global input @@ -580,6 +589,8 @@ proc write_scanner {} { # one of its actions executes a return statement. # -- from the flex(1) man page proc ${::p}::yylex \{\} \{ + variable yy_buffer + variable yy_index variable yy_done variable yytext variable yyleng @@ -588,20 +599,20 @@ proc ${::p}::yylex \{\} \{ if $::startstates { puts $::dest " set ${::p}_current_state \[${::p}::yy_top_state\]" } - puts $::dest " if \{\[string length \$::${::p}_buffer\] - \$::${::p}_index < $::BUFFER_SIZE\} \{ + puts $::dest " if \{\[string length \$yy_buffer\] - \$yy_index < $::BUFFER_SIZE\} \{ if \{\$yy_done == 0\} \{ set ${::p}_new_buffer \"\" - ${::p}::YY_INPUT ${::p}_new_buffer ${::p}_buffer_size $::BUFFER_SIZE - append ::${::p}_buffer \$${::p}_new_buffer + YY_INPUT ${::p}_new_buffer ${::p}_buffer_size $::BUFFER_SIZE + append yy_buffer \$${::p}_new_buffer if \{\$${::p}_buffer_size == 0 && \\ - \[string length \$::${::p}_buffer\] - \$::${::p}_index == 0\} \{ + \[string length \$yy_buffer\] - \$yy_index == 0\} \{ set yy_done 1 \} \} if \$yy_done \{" if $::debugmode { puts $::dest " if \$::${::p}_flex_debug \{ - puts stderr \" --reached end of input buffer\" + puts stderr \" ${::p} --reached end of input buffer\" \}" } if $::callyywrap { @@ -612,7 +623,7 @@ proc ${::p}::yylex \{\} \{ } else { puts -nonewline $::dest " " } - puts $::dest "if \{\[string length \$::${::p}_buffer\] - \$::${::p}_index == 0\} \{ + puts $::dest "if \{\[string length \$yy_buffer\] - \$yy_index == 0\} \{ break \} \} @@ -640,9 +651,9 @@ proc ${::p}::yylex \{\} \{ puts -nonewline $::dest "\$${::p}_current_state == \"$state_name\" && \\\n " } } - puts $::dest "\[regexp -start \$::${::p}_index -indices -line $scan_args -- \{\\A($pattern)\} \$::${::p}_buffer ${::p}_match\] > 0\ && \\ - \[lindex \$${::p}_match 1\] - \$::${::p}_index + 1 > \$yyleng\} \{ - set yytext \[string range \$::${::p}_buffer \$::${::p}_index \[lindex \$${::p}_match 1\]\] + puts $::dest "\[regexp -start \$yy_index -indices -line $scan_args -- \{\\A($pattern)\} \$yy_buffer ${::p}_match\] > 0\ && \\ + \[lindex \$${::p}_match 1\] - \$yy_index + 1 > \$yyleng\} \{ + set yytext \[string range \$yy_buffer \$yy_index \[lindex \$${::p}_match 1\]\] set yyleng \[string length \$yytext\] set ${::p}_matched_rule $rule_num" if $::debugmode { @@ -653,17 +664,17 @@ proc ${::p}::yylex \{\} \{ } # now add the default case puts $::dest " if \{\$${::p}_matched_rule == -1\} \{ - set yytext \[string index \$::${::p}_buffer \$::${::p}_index\] + set yytext \[string index \$yy_buffer \$yy_index\] set yyleng 1" if $::debugmode { puts $::dest " set ${::p}rule_num \"default rule\"" } puts $::dest " \} - incr ::${::p}_index \$yyleng + incr yy_index \$yyleng # workaround for Tcl's circumflex behavior if \{\[string index \$yytext end\] == \"\\n\"\} \{ - set ::${::p}_buffer \[string range \$::${::p}_buffer \$::${::p}_index end\] - set ::${::p}_index 0 + set yy_buffer \[string range \$yy_buffer \$yy_index end\] + set yy_index 0 \}" if $::debugmode { puts $::dest " if \$::${::p}_flex_debug \{ |