8 static const char *const token_names
[] = {
22 "TOKEN_CHARACTER_CONST",
27 "TOKEN_BINARY_SELECTOR",
28 "TOKEN_KEYWORD_SELECTOR",
33 print_token (st_lexer
*lexer
, st_token
*token
)
39 type
= st_token_get_type (token
);
44 // tokens string values
45 case ST_TOKEN_COMMENT
:
46 case ST_TOKEN_IDENTIFIER
:
47 case ST_TOKEN_STRING_CONST
:
48 case ST_TOKEN_SYMBOL_CONST
:
49 case ST_TOKEN_NUMBER_CONST
:
50 case ST_TOKEN_KEYWORD_SELECTOR
:
51 case ST_TOKEN_BINARY_SELECTOR
:
52 case ST_TOKEN_CHARACTER_CONST
:
54 string
= st_token_get_text (token
);
56 printf ("%s (%i:%i: \"%s\")\n", token_names
[type
],
57 st_token_get_line (token
), st_token_get_column (token
), string
);
61 case ST_TOKEN_INVALID
:
63 printf ("%s\n", st_lexer_error_message (lexer
));
68 printf ("%s (%i:%i)\n", token_names
[type
],
69 st_token_get_line (token
), st_token_get_column (token
));
75 #define BUF_SIZE 10000
78 main (int argc
, char *argv
[])
83 printf ("Enter or pipe some Smalltalk code on stdin:\n\n");
85 /* read input from stdin */
86 char buffer
[BUF_SIZE
];
89 while ((c
= getchar ()) != EOF
&& i
< (BUF_SIZE
- 1))
93 lexer
= st_lexer_new (buffer
);
99 token
= st_lexer_next_token (lexer
);
100 type
= st_token_get_type (token
);
102 print_token (lexer
, token
);
104 } while (type
!= ST_TOKEN_EOF
);