| Description | By using display names for tokens in the Bison grammars, errors messages are improved. Attached patch does that, although incompletely:
It can Not be applied as is, because 1) I haven't even tried to compile it(let
alone regression test it); 2) The tokens/grammar needs to be changed in some
cases(it looks wrong and prevents display names); and 3) needs to be reviewed
by someone who actually knows the code. The relevant areas are marked with
"TODO".
This was first posted on kde-buildsystem/kde-core-devel some time ago but appears to have fallen through the cracks, so here it is submitted.
Regards,
Frans |
| Attached Files | tokenDisplayNames.diff [^] (11,733 bytes) 1969-12-31 19:00 [Show Content] [Hide Content]Index: cmDependsFortranLexer.in.l
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmDependsFortranLexer.in.l,v
retrieving revision 1.5
diff -u -3 -p -r1.5 cmDependsFortranLexer.in.l
--- cmDependsFortranLexer.in.l 17 Oct 2005 13:58:53 -0000 1.5
+++ cmDependsFortranLexer.in.l 16 Mar 2006 18:04:08 -0000
@@ -153,7 +153,7 @@ MODULE {
}
#[ \t]*define { return CPP_DEFINE; }
-\$[ \t]*DEFINE { return F90PPR_DEFINE; }
+\$[ \t]*DEFINE { return F90PPR_DEFINE; }
#[ \t]*undef { return CPP_UNDEF; }
\$[ \t]*UNDEF { return F90PPR_UNDEF; }
Index: cmDependsFortranParser.y
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmDependsFortranParser.y,v
retrieving revision 1.10
diff -u -3 -p -r1.10 cmDependsFortranParser.y
--- cmDependsFortranParser.y 14 Mar 2005 13:15:08 -0000 1.10
+++ cmDependsFortranParser.y 16 Mar 2006 18:04:08 -0000
@@ -81,11 +81,28 @@ static void cmDependsFortranError(yyscan
/*-------------------------------------------------------------------------*/
/* Tokens */
-%token USE F_INCLUDE MODULE EOSTMT
+%token USE "USE"
+%token F_INCLUDE "INCLUDE"
+/* TODO distinguish between END MODULE and MODULE" in the scanner */
+%token MODULE "MODULE"
+%token EOSTMT
%token CPP_INCLUDE F90PPR_INCLUDE COCO_INCLUDE
-%token F90PPR_DEFINE CPP_DEFINE F90PPR_UNDEF CPP_UNDEF
-%token CPP_IFDEF CPP_IFNDEF CPP_IF CPP_ELSE CPP_ELIF CPP_ENDIF
-%token F90PPR_IFDEF F90PPR_IFNDEF F90PPR_IF F90PPR_ELSE F90PPR_ELIF F90PPR_ENDIF
+%token F90PPR_DEFINE "DEFINE"
+%token F90PPR_UNDEF "UNDEF"
+%token CPP_UNDEF "undef"
+%token CPP_DEFINE "define"
+%token CPP_IFDEF "ifdef"
+%token CPP_IFNDEF "ifndef"
+%token CPP_IF "if"
+%token CPP_ELSE "else"
+%token CPP_ELIF "elif"
+%token CPP_ENDIF "endif"
+/* TODO Don't use different tokens for "CPP" and "F90PPR". Use the same token and
+ let the parser(this bison grammar) naturally sort out the ambivalence.
+ This will 1) reduce code, and 2) allow all tokens to have display names(only
+ the CPP_ ones currently have). */
+%token F90PPR_IFDEF
+%token F90PPR_IFNDEF F90PPR_IF F90PPR_ELSE F90PPR_ELIF F90PPR_ENDIF
%token UNTERMINATED_STRING
%token <string> CPP_TOENDL STRING WORD
Index: cmDependsJavaParser.y
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmDependsJavaParser.y,v
retrieving revision 1.4
diff -u -3 -p -r1.4 cmDependsJavaParser.y
--- cmDependsJavaParser.y 2 Feb 2005 22:05:38 -0000 1.4
+++ cmDependsJavaParser.y 16 Mar 2006 18:04:08 -0000
@@ -76,111 +76,112 @@ static void cmDependsJavaError(yyscan_t
/*-------------------------------------------------------------------------*/
/* Tokens */
-%token jp_ABSTRACT
-%token jp_ASSERT
-%token jp_BOOLEAN_TYPE
-%token jp_BREAK
-%token jp_BYTE_TYPE
-%token jp_CASE
-%token jp_CATCH
-%token jp_CHAR_TYPE
-%token jp_CLASS
-%token jp_CONTINUE
-%token jp_DEFAULT
-%token jp_DO
-%token jp_DOUBLE_TYPE
-%token jp_ELSE
-%token jp_EXTENDS
-%token jp_FINAL
-%token jp_FINALLY
-%token jp_FLOAT_TYPE
-%token jp_FOR
-%token jp_IF
-%token jp_IMPLEMENTS
-%token jp_IMPORT
-%token jp_INSTANCEOF
-%token jp_INT_TYPE
-%token jp_INTERFACE
-%token jp_LONG_TYPE
-%token jp_NATIVE
-%token jp_NEW
-%token jp_PACKAGE
-%token jp_PRIVATE
-%token jp_PROTECTED
-%token jp_PUBLIC
-%token jp_RETURN
-%token jp_SHORT_TYPE
-%token jp_STATIC
-%token jp_STRICTFP
-%token jp_SUPER
-%token jp_SWITCH
-%token jp_SYNCHRONIZED
-%token jp_THIS
-%token jp_THROW
-%token jp_THROWS
-%token jp_TRANSIENT
-%token jp_TRY
-%token jp_VOID
-%token jp_VOLATILE
-%token jp_WHILE
-
-%token jp_BOOLEANLITERAL
-%token jp_CHARACTERLITERAL
-%token jp_DECIMALINTEGERLITERAL
-%token jp_FLOATINGPOINTLITERAL
-%token jp_HEXINTEGERLITERAL
-%token jp_NULLLITERAL
-%token jp_STRINGLITERAL
-
-%token jp_NAME
-
-%token jp_AND
-%token jp_ANDAND
-%token jp_ANDEQUALS
-%token jp_BRACKETEND
-%token jp_BRACKETSTART
-%token jp_CARROT
-%token jp_CARROTEQUALS
-%token jp_COLON
-%token jp_COMMA
-%token jp_CURLYEND
-%token jp_CURLYSTART
-%token jp_DIVIDE
-%token jp_DIVIDEEQUALS
-%token jp_DOLLAR
-%token jp_DOT
-%token jp_EQUALS
-%token jp_EQUALSEQUALS
-%token jp_EXCLAMATION
-%token jp_EXCLAMATIONEQUALS
-%token jp_GREATER
-%token jp_GTEQUALS
-%token jp_GTGT
-%token jp_GTGTEQUALS
-%token jp_GTGTGT
-%token jp_GTGTGTEQUALS
-%token jp_LESLESEQUALS
-%token jp_LESSTHAN
-%token jp_LTEQUALS
-%token jp_LTLT
-%token jp_MINUS
-%token jp_MINUSEQUALS
-%token jp_MINUSMINUS
-%token jp_PAREEND
-%token jp_PARESTART
-%token jp_PERCENT
-%token jp_PERCENTEQUALS
-%token jp_PIPE
-%token jp_PIPEEQUALS
-%token jp_PIPEPIPE
-%token jp_PLUS
-%token jp_PLUSEQUALS
-%token jp_PLUSPLUS
-%token jp_QUESTION
-%token jp_SEMICOL
-%token jp_TILDE
-%token jp_TIMES
-%token jp_TIMESEQUALS
+/* TODO Review, most of this was done with regexp. */
+%token jp_ABSTRACT "abstract"
+%token jp_ASSERT "assert"
+%token jp_BOOLEAN_TYPE "boolean"
+%token jp_BREAK "break"
+%token jp_BYTE_TYPE "byte"
+%token jp_CASE "case"
+%token jp_CATCH "catch"
+%token jp_CHAR_TYPE "char"
+%token jp_CLASS "class"
+%token jp_CONTINUE "continue"
+%token jp_DEFAULT "default"
+%token jp_DO "do"
+%token jp_DOUBLE_TYPE "double"
+%token jp_ELSE "else"
+%token jp_EXTENDS "extends"
+%token jp_FINAL "final"
+%token jp_FINALLY "finally"
+%token jp_FLOAT_TYPE "float"
+%token jp_FOR "for"
+%token jp_IF "if"
+%token jp_IMPLEMENTS "implements"
+%token jp_IMPORT "import"
+%token jp_INSTANCEOF "instanceof"
+%token jp_INT_TYPE "int"
+%token jp_INTERFACE "interface"
+%token jp_LONG_TYPE "long"
+%token jp_NATIVE "native"
+%token jp_NEW "new"
+%token jp_PACKAGE "package"
+%token jp_PRIVATE "private"
+%token jp_PROTECTED "protected"
+%token jp_PUBLIC "public"
+%token jp_RETURN "return"
+%token jp_SHORT_TYPE "short"
+%token jp_STATIC "static"
+%token jp_STRICTFP "strictfp"
+%token jp_SUPER "super"
+%token jp_SWITCH "switch"
+%token jp_SYNCHRONIZED "synchronized"
+%token jp_THIS "this"
+%token jp_THROW "throw"
+%token jp_THROWS "throws"
+%token jp_TRANSIENT "transient"
+%token jp_TRY "try"
+%token jp_VOID "void"
+%token jp_VOLATILE "volatile"
+%token jp_WHILE "while"
+
+%token jp_BOOLEANLITERAL "<boolean literal>"
+%token jp_CHARACTERLITERAL "<character literal>"
+%token jp_DECIMALINTEGERLITERAL "<decimal integer literal>"
+%token jp_FLOATINGPOINTLITERAL "<floating point literal>"
+%token jp_HEXINTEGERLITERAL "<hex integer literal>"
+%token jp_NULLLITERAL "null"
+%token jp_STRINGLITERAL "<string literal>"
+
+%token jp_NAME "<name>"
+
+%token jp_AND "&"
+%token jp_ANDAND "&&"
+%token jp_ANDEQUALS "&="
+%token jp_BRACKETEND "]"
+%token jp_BRACKETSTART "["
+%token jp_CARROT "^"
+%token jp_CARROTEQUALS "^="
+%token jp_COLON ":"
+%token jp_COMMA ","
+%token jp_CURLYEND "}"
+%token jp_CURLYSTART "{"
+%token jp_DIVIDE "/"
+%token jp_DIVIDEEQUALS "/="
+%token jp_DOLLAR "$"
+%token jp_DOT "."
+%token jp_EQUALS "="
+%token jp_EQUALSEQUALS "=="
+%token jp_EXCLAMATION "!"
+%token jp_EXCLAMATIONEQUALS "!="
+%token jp_GREATER ">"
+%token jp_GTEQUALS ">="
+%token jp_GTGT ">>"
+%token jp_GTGTEQUALS ">>="
+%token jp_GTGTGT ">>>"
+%token jp_GTGTGTEQUALS ">>>="
+%token jp_LESLESEQUALS "<<="
+%token jp_LESSTHAN "<"
+%token jp_LTEQUALS "<="
+%token jp_LTLT "<<"
+%token jp_MINUS "-"
+%token jp_MINUSEQUALS "-="
+%token jp_MINUSMINUS "--"
+%token jp_PAREEND ")"
+%token jp_PARESTART "("
+%token jp_PERCENT "%"
+%token jp_PERCENTEQUALS "%="
+%token jp_PIPE "|"
+%token jp_PIPEEQUALS "|="
+%token jp_PIPEPIPE "||"
+%token jp_PLUS "+"
+%token jp_PLUSEQUALS "+="
+%token jp_PLUSPLUS "++"
+%token jp_QUESTION "?"
+%token jp_SEMICOL ";"
+%token jp_TILDE "~"
+%token jp_TIMES "*"
+%token jp_TIMESEQUALS "*="
%token jp_ERROR
Index: cmExprLexer.in.l
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExprLexer.in.l,v
retrieving revision 1.1
diff -u -3 -p -r1.1 cmExprLexer.in.l
--- cmExprLexer.in.l 17 Oct 2005 20:42:47 -0000 1.1
+++ cmExprLexer.in.l 16 Mar 2006 18:04:08 -0000
@@ -87,18 +87,18 @@ Modify cmExprLexer.h:
[0-9][0-9]* { yylvalp->Number = atoi(yytext); return exp_NUMBER; }
-"+" { return exp_PLUS; }
-"-" { return exp_MINUS; }
-"*" { return exp_TIMES; }
-"/" { return exp_DIVIDE; }
-"%" { return exp_MOD; }
+"+" { return exp_PLUS; }
+"-" { return exp_MINUS; }
+"*" { return exp_TIMES; }
+"/" { return exp_DIVIDE; }
+"%" { return exp_MOD; }
"\|" { return exp_OR; }
-"&" { return exp_AND; }
-"^" { return exp_XOR; }
-"~" { return exp_NOT; }
+"&" { return exp_AND; }
+"^" { return exp_XOR; }
+"~" { return exp_NOT; }
"<<" { return exp_SHIFTLEFT; }
">>" { return exp_SHIFTRIGHT; }
-"(" { return exp_OPENPARENT; }
-")" { return exp_CLOSEPARENT; }
+"(" { return exp_OPENPARENT; }
+")" { return exp_CLOSEPARENT; }
%%
Index: cmExprParser.y
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmExprParser.y,v
retrieving revision 1.2
diff -u -3 -p -r1.2 cmExprParser.y
--- cmExprParser.y 17 Oct 2005 20:53:11 -0000 1.2
+++ cmExprParser.y 16 Mar 2006 18:04:08 -0000
@@ -70,20 +70,20 @@ static void cmExprError(yyscan_t yyscann
/*-------------------------------------------------------------------------*/
/* Tokens */
-%token exp_PLUS
-%token exp_MINUS
-%token exp_TIMES
-%token exp_DIVIDE
-%token exp_MOD
-%token exp_SHIFTLEFT
-%token exp_SHIFTRIGHT
-%token exp_OPENPARENT
-%token exp_CLOSEPARENT
-%token exp_OR;
-%token exp_AND;
-%token exp_XOR;
-%token exp_NOT;
-%token exp_NUMBER;
+%token exp_PLUS "+"
+%token exp_MINUS "-"
+%token exp_TIMES "*"
+%token exp_DIVIDE "/"
+%token exp_MOD "%"
+%token exp_SHIFTLEFT "<<"
+%token exp_SHIFTRIGHT ">>"
+%token exp_OPENPARENT "("
+%token exp_CLOSEPARENT ")"
+%token exp_OR; "|" /* TODO is it literally '\|', or why is it escaped in the lexer? */
+%token exp_AND; "&"
+%token exp_XOR; "^"
+%token exp_NOT; "~"
+%token exp_NUMBER; "<number>"
/*-------------------------------------------------------------------------*/
/* grammar */
|