scanner = g_new0 (GScanner, 1);
scanner->user_data = NULL;
- scanner->max_parse_errors = 0;
+ scanner->max_parse_errors = 1;
scanner->parse_errors = 0;
scanner->input_name = NULL;
g_datalist_init (&scanner->qdata);
switch (expected_token)
{
gboolean need_valid;
-
+ gchar *tstring;
+ case G_TOKEN_EOF:
+ g_snprintf (expected_string, expected_string_len, "end of file");
+ break;
default:
if (expected_token >= 1 && expected_token <= 255)
{
symbol_spec);
/* FIXME: should we attempt to lookup the symbol_name for symbol_2_token? */
break;
-
+ case G_TOKEN_CHAR:
+ g_snprintf (expected_string, expected_string_len, "%scharacter",
+ scanner->token == G_TOKEN_CHAR ? "valid " : "");
+ break;
+ case G_TOKEN_BINARY:
+ tstring = "binary";
+ g_snprintf (expected_string, expected_string_len, "%snumber (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
+ break;
+ case G_TOKEN_OCTAL:
+ tstring = "octal";
+ g_snprintf (expected_string, expected_string_len, "%snumber (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
+ break;
case G_TOKEN_INT:
- g_snprintf (expected_string, expected_string_len, "%snumber (integer)",
- scanner->token == G_TOKEN_INT ? "valid " : "");
+ tstring = "integer";
+ g_snprintf (expected_string, expected_string_len, "%snumber (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
+ break;
+ case G_TOKEN_HEX:
+ tstring = "hexadecimal";
+ g_snprintf (expected_string, expected_string_len, "%snumber (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
break;
-
case G_TOKEN_FLOAT:
- g_snprintf (expected_string, expected_string_len, "%snumber (float)",
- scanner->token == G_TOKEN_FLOAT ? "valid " : "");
+ tstring = "float";
+ g_snprintf (expected_string, expected_string_len, "%snumber (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
break;
-
case G_TOKEN_STRING:
g_snprintf (expected_string,
expected_string_len,
"%sstring constant",
scanner->token == G_TOKEN_STRING ? "valid " : "");
break;
-
case G_TOKEN_IDENTIFIER:
case G_TOKEN_IDENTIFIER_NULL:
+ need_valid = (scanner->token == G_TOKEN_IDENTIFIER_NULL ||
+ scanner->token == G_TOKEN_IDENTIFIER);
g_snprintf (expected_string,
expected_string_len,
"%s%s",
- (scanner->token == G_TOKEN_IDENTIFIER_NULL ||
- scanner->token == G_TOKEN_IDENTIFIER ? "valid " : ""),
+ need_valid ? "valid " : "",
identifier_spec);
break;
-
- case G_TOKEN_EOF:
- g_snprintf (expected_string, expected_string_len, "end of file");
+ case G_TOKEN_COMMENT_SINGLE:
+ tstring = "single-line";
+ g_snprintf (expected_string, expected_string_len, "%scomment (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
+ break;
+ case G_TOKEN_COMMENT_MULTI:
+ tstring = "multi-line";
+ g_snprintf (expected_string, expected_string_len, "%scomment (%s)",
+ scanner->token == expected_token ? "valid " : "", tstring);
break;
-
case G_TOKEN_NONE:
+ case G_TOKEN_ERROR:
+ /* this is handled upon printout */
break;
}
message_prefix = "";
message = "";
}
-
- if (expected_token != G_TOKEN_NONE)
+ if (expected_token == G_TOKEN_ERROR)
+ {
+ msg_handler (scanner,
+ "failure around %s%s%s",
+ token_string,
+ message_prefix,
+ message);
+ }
+ else if (expected_token == G_TOKEN_NONE)
{
if (print_unexp)
msg_handler (scanner,
- "unexpected %s, expected %s%s%s",
+ "unexpected %s%s%s",
token_string,
- expected_string,
message_prefix,
message);
else
msg_handler (scanner,
- "%s, expected %s%s%s",
+ "%s%s%s",
token_string,
- expected_string,
message_prefix,
message);
}
{
if (print_unexp)
msg_handler (scanner,
- "unexpected %s%s%s",
+ "unexpected %s, expected %s%s%s",
token_string,
+ expected_string,
message_prefix,
message);
else
msg_handler (scanner,
- "%s%s%s",
+ "%s, expected %s%s%s",
token_string,
+ expected_string,
message_prefix,
message);
}