Mauvais numéro de colonne en cas d'erreur qtgiac

Bugs

Modérateur : xcasadmin

jlaurens
Messages : 16
Inscription : jeu. juil. 03, 2014 10:23 am

Mauvais numéro de colonne en cas d'erreur qtgiac

Message par jlaurens » mar. juil. 08, 2014 11:36 am

Bonjour,

si on entre "a b", voici le diagnostic d'erreur dans la console

:1: syntax error, unexpected T_SYMBOL line 1 col 4 at b

c'est en fait col 3.

parisse
Messages : 5112
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Mauvais numéro de colonne en cas d'erreur qtgiac

Message par parisse » mar. juil. 08, 2014 1:31 pm

difficile a corriger a mon avis, parce que l'interpreteur ne detecte l'erreur qu'au moment ou il parse le caractere suivant le b (saut de ligne rajoute automatiquement). Maintenant si un expert en flex/bison peut se pencher sur la question, c'est surement ameliorable!

jlaurens
Messages : 16
Inscription : jeu. juil. 03, 2014 10:23 am

Re: Mauvais numéro de colonne en cas d'erreur qtgiac (soluti

Message par jlaurens » mar. juil. 08, 2014 11:43 pm

Ce n'est pas vraiment très propre mais voici ce qu'on peut faire sans modifier le parser.

int giac_yyerror(yyscan_t scanner,const char *s) {
const giac::context * contextptr = giac_yyget_extra(scanner);
int col = giac_yyget_column(scanner);
int line = giac::lexer_line_number(contextptr);
std::string token_name=string(giac_yyget_text(scanner));
bool is_at_end = (token_name.size()==2 && (token_name[0]==char(0xC3)) && (token_name[1]==char(0xBF)));
std::string suffix = " (reserved word)";
if (token_name.size()>suffix.size()
&& token_name.compare(token_name.size()-suffix.size(),suffix.size(),suffix)) {
if (col>=token_name.size()-suffix.size()) {
col -= token_name.size()-suffix.size();
}
} else if (col>=token_name.size()) {
col -= token_name.size();
}
giac::lexer_column_number(contextptr)=col;
if (is_at_end) {
parser_error(":" + giac::print_INT_(line) + ": " +string(s) + " at end of input\n",contextptr);
giac::parsed_gen(giac::undef,contextptr);
} else {
parser_error( ":" + giac::print_INT_(line) + ": " + string(s) + " line " + giac::print_INT_(line) + " col " + giac::print_INT_(col) + " at " + token_name +"\n",contextptr);
giac::parsed_gen(giac::string2gen(token_name,false),contextptr);
}
if (!giac::first_error_line(contextptr)) {
giac::first_error_line(line,contextptr);
if (is_at_end) {
token_name="end of input";
}
giac:: error_token_name(token_name,contextptr);
}
return line;
}

parisse
Messages : 5112
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Mauvais numéro de colonne en cas d'erreur qtgiac

Message par parisse » mer. juil. 09, 2014 5:56 am

Je mets ca dans input_parser.yy pour la prochaine version 1.1.2 instable, merci!

Répondre