On Thursday 16 March 2006 17:00, Brad King wrote:
> Frans Englich wrote:
> > On Thursday 16 March 2006 12:46, Adriaan de Groot wrote:
> >>Well, since kdelibs builds with CMake just fine (see the dartboard for
> >>results), I figured it was time to try out kdebase. This is where one
> >>rapidly runs into the lack of canonical knowledge about CMake -- and a
> >>little laziness wrt. reading the entire CMake manual. Here's some
> >> comments based on current output (using CMake 2.3.3). Phrased in an
> >> unfriendly manner.
> >>
> >>Syntax error in cmake code at
> >>(no filename given):-1:
> >>syntax error, unexpected cal_SYMBOL, expecting cal_RCURLY (12), when
> >
> > I think that error message can be improved. I started on
> > mCommandArgumentParser.y, patch attached. Someone should give token
> > display names for all tokens in all grammars(IMHO, AFAICT).
> >
> > A cmake developer is perhaps lurking that can take care of it, or someone
> > else that can ensure it gets the proper attention?
>
> Thanks for the patch.  I've committed it in CVS CMake.  It will still
> not avoid the missing filename and line number problem:

Expected, none of my changes should have affected that. 

> When you locate the error please try to duplicate it in a small test
> case and submit a bug report here:

(I'm not analyzing it, so someone else has to do that).


I meant that all the grammars needed to be fixed, not just that file. Attached 
patch do that, or something in that direction.

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".

(It smells NIH syndrom, I don't get why all these languages needs to be 
invented/implemented. A build system using Python would have avoided 
reinventing-wheel bugs, etc, AFAICT.)


Cheers,

                Frans

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 */
_______________________________________________
Kde-buildsystem mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-buildsystem

Reply via email to