@@ -307,12 +307,12 @@ static void tokenizer(
307
307
const char * STRING_BEGIN = "\"" ;
308
308
const char * STRING_END = "\"" ;
309
309
const char * CHAR_BEGIN = "\'" ;
310
- const char * CHAR_END = "\'" ;
310
+ // const char* CHAR_END = "\'";
311
311
/*C-style comments.*/
312
312
const char * COMMENT_BEGIN = "/*" ;
313
313
const char * COMMENT_END = "*/" ;
314
314
const char * LINECOMMENT_BEGIN = "//" ;
315
- const char * LINECOMMENT_END = "\n" ;
315
+ // const char* LINECOMMENT_END = "\n";
316
316
const char * INCLUDE_OPEN_SYS = "<" ;
317
317
const char * INCLUDE_CLOSE_SYS = ">" ;
318
318
char * text_store = work -> text ;
@@ -722,35 +722,49 @@ static void tokenizer(
722
722
}
723
723
//if(mode == 0)
724
724
mode_whitespace :
725
+ for (;work -> text [i ] != '\0' ; i ++ )
725
726
{ /*reading whitespace.*/
726
727
work -> data = 0 ;
727
- if (isspace (work -> text [i ]) && work -> text [i ]!= '\n' ) continue ;
728
- work = consume__bytes_with_bigstore (work , i ); i = -1 ; mode = -1 ; continue ;
728
+ if (isspace (work -> text [i ]) && work -> text [i ]!= '\n' ) {
729
+ continue ;
730
+ }
731
+
732
+ work = consume__bytes_with_bigstore (work , i );
733
+ i = 0 ;
734
+ mode = -1 ;
735
+ goto done_selecting_mode ;
729
736
}
737
+ break ;
730
738
//if(mode == 1)
731
739
mode_identifier :
740
+ for (;work -> text [i ] != '\0' ; i ++ )
732
741
{ /*valid identifier*/
733
742
work -> data = (void * )8 ;
734
743
if (
735
744
isUnusual (work -> text [i ])
736
745
)
737
746
{
738
747
work = consume__bytes_with_bigstore (work , i );
739
- i = -1 ; mode = -1 ;
748
+ i = 0 ; mode = -1 ;
749
+ goto done_selecting_mode ;
740
750
}
741
751
continue ;
742
752
}
753
+ break ;
743
754
//if(mode == 7)
744
- mode_decliteral :{ /*Decimal literal, might turn into float*/
755
+ mode_decliteral :
756
+ for (;work -> text [i ] != '\0' ; i ++ )
757
+ { /*Decimal literal, might turn into float*/
745
758
work -> data = (void * )6 ;
746
759
if (work -> text [i ] == '.' )
747
760
{
748
761
mode = 11 ; /*Begin parsing decimal fractional portion*/
749
762
work -> data = (void * )7 ;
750
- continue ;
763
+ i ++ ;
764
+ goto done_selecting_mode ;
751
765
}
752
766
if (work -> text [i ] == 'E' || work -> text [i ] == 'e' ){
753
- if (work -> text [i + 1 ] == '-' || work -> text [i + 1 ] == '+' )
767
+ if (work -> text [i + 1 ] == '-' || work -> text [i + 1 ] == '+' )
754
768
i ++ ;
755
769
mode = 10 ; /*Begin parsing the E portion.*/
756
770
work -> data = (void * )7 ;
@@ -761,27 +775,30 @@ static void tokenizer(
761
775
!my_isdigit (work -> text [i ])
762
776
)
763
777
{
764
-
765
778
work = consume__bytes_with_bigstore (work , i );
766
- i = -1 ; mode = -1 ; continue ;
779
+ i = 0 ; mode = -1 ; goto done_selecting_mode ;
767
780
}
768
781
continue ;
769
782
}
783
+ break ;
770
784
//if(mode == 8)
771
785
mode_hexliteral :
786
+ for (;work -> text [i ] != '\0' ; i ++ )
772
787
{ /*Hex literal*/
773
788
work -> data = (void * )6 ;
774
789
if (
775
790
!my_ishex (work -> text [i ])
776
791
)
777
792
{
778
793
work = consume__bytes_with_bigstore (work , i );
779
- i = -1 ; mode = -1 ; continue ;
794
+ i = 0 ; mode = -1 ; goto done_selecting_mode ;
780
795
}
781
796
continue ;
782
797
}
783
798
//if(mode == 9)
784
- mode_octliteral :{ /*Octal Literal*/
799
+ mode_octliteral :
800
+ for (;work -> text [i ] != '\0' ; i ++ )
801
+ { /*Octal Literal*/
785
802
work -> data = (void * )6 ;
786
803
if (
787
804
!my_isoct (work -> text [i ])
@@ -790,7 +807,8 @@ static void tokenizer(
790
807
if (my_isdigit (work -> text [i ]))
791
808
{
792
809
mode = 7 ; /*This is a decimal literal, actually*/
793
- continue ;
810
+ i ++ ;
811
+ goto done_selecting_mode ;
794
812
}
795
813
/*allow 0e-3*/
796
814
if (work -> text [i ] == 'E' || work -> text [i ] == 'e' ){
@@ -805,25 +823,35 @@ static void tokenizer(
805
823
{
806
824
mode = 11 ; /*Begin parsing decimal fractional portion*/
807
825
work -> data = (void * )7 ;
808
- continue ;
826
+ i ++ ;
827
+ goto done_selecting_mode ;
809
828
}
810
829
work = consume__bytes_with_bigstore (work , i );
811
- i = -1 ; mode = -1 ; continue ;
830
+ i = 0 ; mode = -1 ;
831
+ goto done_selecting_mode ;
812
832
}
813
833
continue ;
814
834
}
835
+ break ;
815
836
//if(mode == 10)
816
- afterE :{ /*after E*/
837
+ afterE :
838
+ for (;work -> text [i ] != '\0' ; i ++ )
839
+ { /*after E*/
817
840
work -> data = (void * )7 ;
818
841
if (!my_isdigit (work -> text [i ])){
819
842
work -> data = (void * )7 ;
820
843
work = consume__bytes_with_bigstore (work , i );
821
- i = -1 ; mode = -1 ; continue ;
844
+ i = 0 ;
845
+ mode = -1 ;
846
+ goto done_selecting_mode ;
822
847
}
823
848
continue ;
824
849
}
850
+ break ;
825
851
//if(mode == 11)
826
- afterRadix :{ /*After the radix of a float*/
852
+ afterRadix :
853
+ for (;work -> text [i ] != '\0' ; i ++ )
854
+ { /*After the radix of a float*/
827
855
work -> data = (void * )7 ;
828
856
if (work -> text [i ] == 'E' || work -> text [i ] == 'e' ){
829
857
if (work -> text [i + 1 ] == '-' || work -> text [i + 1 ] == '+' )
@@ -834,63 +862,104 @@ static void tokenizer(
834
862
}
835
863
if (!my_isdigit (work -> text [i ])){
836
864
work = consume__bytes_with_bigstore (work , i );
837
- i = -1 ; mode = -1 ; continue ;
865
+ i = 0 ; mode = -1 ; goto done_selecting_mode ;
838
866
}
839
867
continue ;
840
868
}
869
+ break ;
841
870
//if(mode == 12)
842
- mode_incsys :{
871
+ mode_incsys :
872
+ for (;work -> text [i ] != '\0' ; i ++ )
873
+ {
843
874
work -> data = (void * )22 ;
844
875
if (work -> text [i ] == '\\' && work -> text [i + 1 ] != '\0' ) {i ++ ; continue ;}
845
876
if (strfind (work -> text + i , INCLUDE_CLOSE_SYS ) == 0 ){
846
877
i += strlen (INCLUDE_CLOSE_SYS );
847
- work = consume__bytes_with_bigstore (work , i ); i = -1 ; mode = -1 ; continue ;
878
+ work = consume__bytes_with_bigstore (work , i );
879
+ i = 0 ;
880
+ mode = -1 ;
881
+ goto done_selecting_mode ;
848
882
}
849
883
continue ;
850
884
}
885
+ break ;
851
886
//if(mode == 2)
852
- mode_string :{ /*string.*/
887
+ mode_string :
888
+ for (;work -> text [i ] != '\0' ; i ++ ){ /*string.*/
853
889
work -> data = (void * )2 ;
854
890
if (work -> text [i ] == '\\' && work -> text [i + 1 ] != '\0' ) {i ++ ; continue ;}
855
- if (strfind (work -> text + i , STRING_END ) == 0 ){
891
+ if (
892
+ //strfind(work->text + i, STRING_END) == 0
893
+ (work -> text [i ] == '\"' )
894
+ ){
856
895
i += strlen (STRING_END );
857
- work = consume__bytes_with_bigstore (work , i ); i = -1 ; mode = -1 ; continue ;
896
+ work = consume__bytes_with_bigstore (work , i );
897
+ i = 0 ;
898
+ mode = -1 ;
899
+ goto done_selecting_mode ;
858
900
}
859
901
continue ;
860
902
}
903
+ break ;
861
904
//if(mode == 3)
862
- mode_comment :{ /*comment.*/
905
+ mode_comment :
906
+ for (;work -> text [i ] != '\0' ; i ++ )
907
+ { /*comment.*/
863
908
work -> data = (void * )4 ;
864
909
/*if(work->text[i] == '\\' && work->text[i+1] != '\0') {i++; continue;}*/
865
- if (strfind (work -> text + i , COMMENT_END ) == 0 ){
910
+ if (
911
+ //strfind(work->text + i, COMMENT_END) == 0
912
+ (work -> text [i ] == '*' ) &&
913
+ (work -> text [i + 1 ] == '/' )
914
+ ){
866
915
i += strlen (COMMENT_END );
867
916
868
- work = consume__bytes_with_bigstore (work , i ); i = -1 ; mode = -1 ; continue ;
917
+ work = consume__bytes_with_bigstore (work , i );
918
+ i = 0 ;
919
+ mode = -1 ;
920
+ goto done_selecting_mode ;
869
921
}
870
922
continue ;
871
923
}
924
+ break ;
872
925
//if(mode == 4)
873
- mode_charlit :{ /*char literal.*/
926
+ mode_charlit :
927
+ for (;work -> text [i ] != '\0' ; i ++ )
928
+ { /*char literal.*/
874
929
work -> data = (void * )3 ;
875
930
if (work -> text [i ] == '\\' && work -> text [i + 1 ] != '\0' ) {i ++ ; continue ;}
876
- if (strfind (work -> text + i , CHAR_END ) == 0 ){
877
- i += strlen (CHAR_END );
878
- work = consume__bytes_with_bigstore (work , i ); i = -1 ; mode = -1 ; continue ;
931
+ if (
932
+ //strfind(work->text + i, CHAR_END) == 0
933
+ work -> text [i ] == '\''
934
+ ){
935
+ i += 1 ;
936
+ work = consume__bytes_with_bigstore (work , i );
937
+ i = 0 ;
938
+ mode = -1 ;
939
+ goto done_selecting_mode ;
879
940
}
880
941
continue ;
881
942
}
943
+ break ;
882
944
//if(mode == 6)
883
- mode_linecomment :{ /*line comment*/
945
+ mode_linecomment :
946
+ for (;work -> text [i ] != '\0' ; i ++ )
947
+ { /*line comment*/
884
948
work -> data = (void * )4 ;
885
- if (strfind (work -> text + i , LINECOMMENT_END ) == 0 ){
949
+ if (
950
+ //strfind(work->text + i, LINECOMMENT_END) == 0
951
+ (work -> text [i ] == '\n' )
952
+ ){
886
953
/*i+=strlen(LINECOMMENT_END);*/
887
954
888
955
work = consume__bytes_with_bigstore (work , i );
889
- i = -1 ;
890
- mode = -1 ; continue ;
956
+ i = 0 ;
957
+ mode = -1 ;
958
+ goto done_selecting_mode ;
891
959
}
892
960
continue ;
893
961
}
962
+ break ;
894
963
} /*eof main tokenizer*/
895
964
//The very last token is currently pointing at the middle of a buffer...
896
965
{
0 commit comments