[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdevelop/buildtools/managers/qmake/parser
From:       Andreas Pakulat <apaku () gmx ! de>
Date:       2007-07-19 22:01:06
Message-ID: 1184882466.663836.363.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 690040 by apaku:

Fix the two conflicts the parser had - one was a bug in a rule, the other is fixed by \
some refactoring of the grammar.

 M  +5 -5      generated/qmake_ast.h  
 M  +2 -2      generated/qmake_default_visitor.cpp  
 M  +1 -1      generated/qmake_default_visitor.h  
 M  +59 -46    generated/qmake_parser.cpp  
 M  +1 -1      generated/qmake_parser.h  
 M  +1 -1      generated/qmake_visitor.cpp  
 M  +1 -1      generated/qmake_visitor.h  
 M  +6 -6      qmake.g  
 M  +2 -2      qmakedebugvisitor.cpp  
 M  +1 -1      qmakedebugvisitor.h  
 M  +1 -0      qmakelexer.cpp  


--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_ast.h \
#690039:690040 @@ -24,7 +24,7 @@
 
   struct argument_ast;
 
-  struct funcref_ast;
+  struct func_var_ref_ast;
 
   struct function_args_ast;
 
@@ -60,7 +60,7 @@
       enum ast_node_kind_enum {
         Kind_arg_list =  1000,
         Kind_argument =  1001,
-        Kind_funcref =  1002,
+        Kind_func_var_ref =  1002,
         Kind_function_args =  1003,
         Kind_function_scope =  1004,
         Kind_id_or_value =  1005,
@@ -105,11 +105,11 @@
       ref_ast *ref;
     };
 
-  struct funcref_ast:  public ast_node
+  struct func_var_ref_ast:  public ast_node
     {
       enum
       {
-        KIND =  Kind_funcref
+        KIND =  Kind_func_var_ref
       };
 
       std::size_t id;
@@ -196,8 +196,8 @@
         KIND =  Kind_ref
       };
 
+      func_var_ref_ast *func_var_ref;
       varref_ast *varref;
-      funcref_ast *funcref;
       std::size_t idref;
     };
 
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_default_visitor.cpp \
#690039:690040 @@ -29,7 +29,7 @@
     visit_node(node->ref);
   }
 
-  void default_visitor::visit_funcref(funcref_ast *node)
+  void default_visitor::visit_func_var_ref(func_var_ref_ast *node)
   {
     visit_node(node->args);
   }
@@ -80,8 +80,8 @@
 
   void default_visitor::visit_ref(ref_ast *node)
   {
+    visit_node(node->func_var_ref);
     visit_node(node->varref);
-    visit_node(node->funcref);
   }
 
   void default_visitor::visit_scope_body(scope_body_ast *node)
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_default_visitor.h \
#690039:690040 @@ -15,7 +15,7 @@
     public:
       virtual void visit_arg_list(arg_list_ast *node);
       virtual void visit_argument(argument_ast *node);
-      virtual void visit_funcref(funcref_ast *node);
+      virtual void visit_func_var_ref(func_var_ref_ast *node);
       virtual void visit_function_args(function_args_ast *node);
       virtual void visit_function_scope(function_scope_ast *node);
       virtual void visit_id_or_value(id_or_value_ast *node);
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_parser.cpp \
#690039:690040 @@ -293,9 +293,9 @@
     return  true;
   }
 
-  bool parser::parse_funcref(funcref_ast **yynode)
+  bool parser::parse_func_var_ref(func_var_ref_ast **yynode)
   {
-    *yynode =  create<funcref_ast>();
+    *yynode =  create<func_var_ref_ast>();
 
     (*yynode)->start_token =  token_stream->index() -  1;
 
@@ -310,16 +310,26 @@
         (*yynode)->id =  token_stream->index() -  1;
         yylex();
 
-        function_args_ast *__node_5 =  0;
+        if  (yytoken ==  Token_LPAREN)
+          {
+            function_args_ast *__node_5 =  0;
 
-        if  (!parse_function_args(&__node_5))
+            if  (!parse_function_args(&__node_5))
+              {
+                yy_expected_symbol(ast_node::Kind_function_args,  "function_args");
+                return  false;
+              }
+
+            (*yynode)->args =  __node_5;
+
+          }
+
+        else if  (true /*epsilon*/)
+        {}
+        else
           {
-            yy_expected_symbol(ast_node::Kind_function_args,  "function_args");
             return  false;
           }
-
-        (*yynode)->args =  __node_5;
-
       }
 
     else
@@ -396,7 +406,7 @@
 
         (*yynode)->args =  __node_7;
 
-        if  (yytoken ==  Token_RBRACE
+        if  (yytoken ==  Token_LBRACE
              ||  yytoken ==  Token_COLON)
           {
             scope_body_ast *__node_8 =  0;
@@ -760,8 +770,26 @@
 
           }
 
-        else if  (true /*epsilon*/)
-        {}
+        else if  (yytoken ==  Token_CONT)
+          {
+            if  (yytoken !=  Token_CONT)
+              {
+                yy_expected_token(yytoken,  Token_CONT,  "cont");
+                return  false;
+              }
+
+            yylex();
+
+            if  (yytoken !=  Token_NEWLINE)
+              {
+                yy_expected_token(yytoken,  Token_NEWLINE,  "newline");
+                return  false;
+              }
+
+            yylex();
+
+          }
+
         else
           {
             return  false;
@@ -797,34 +825,33 @@
 
             yylex();
 
-            if  (yytoken ==  Token_LBRACKET
-                 ||  yytoken ==  Token_LBRACE
-                 ||  yytoken ==  Token_LPAREN
-                 ||  yytoken ==  Token_IDENTIFIER)
+            if  (yytoken ==  Token_IDENTIFIER)
               {
-                varref_ast *__node_13 =  0;
+                func_var_ref_ast *__node_13 =  0;
 
-                if  (!parse_varref(&__node_13))
+                if  (!parse_func_var_ref(&__node_13))
                   {
-                    yy_expected_symbol(ast_node::Kind_varref,  "varref");
+                    yy_expected_symbol(ast_node::Kind_func_var_ref,  \
"func_var_ref");  return  false;
                   }
 
-                (*yynode)->varref =  __node_13;
+                (*yynode)->func_var_ref =  __node_13;
 
               }
 
-            else if  (yytoken ==  Token_IDENTIFIER)
+            else if  (yytoken ==  Token_LBRACKET
+                      ||  yytoken ==  Token_LBRACE
+                      ||  yytoken ==  Token_LPAREN)
               {
-                funcref_ast *__node_14 =  0;
+                varref_ast *__node_14 =  0;
 
-                if  (!parse_funcref(&__node_14))
+                if  (!parse_varref(&__node_14))
                   {
-                    yy_expected_symbol(ast_node::Kind_funcref,  "funcref");
+                    yy_expected_symbol(ast_node::Kind_varref,  "varref");
                     return  false;
                   }
 
-                (*yynode)->funcref =  __node_14;
+                (*yynode)->varref =  __node_14;
 
               }
 
@@ -893,14 +920,14 @@
 
     (*yynode)->start_token =  token_stream->index() -  1;
 
-    if  (yytoken ==  Token_RBRACE
+    if  (yytoken ==  Token_LBRACE
          ||  yytoken ==  Token_COLON)
       {
-        if  (yytoken ==  Token_RBRACE)
+        if  (yytoken ==  Token_LBRACE)
           {
-            if  (yytoken !=  Token_RBRACE)
+            if  (yytoken !=  Token_LBRACE)
               {
-                yy_expected_token(yytoken,  Token_RBRACE,  "rbrace");
+                yy_expected_token(yytoken,  Token_LBRACE,  "lbrace");
                 return  false;
               }
 
@@ -940,9 +967,9 @@
 
               }
 
-            if  (yytoken !=  Token_LBRACE)
+            if  (yytoken !=  Token_RBRACE)
               {
-                yy_expected_token(yytoken,  Token_LBRACE,  "lbrace");
+                yy_expected_token(yytoken,  Token_RBRACE,  "rbrace");
                 return  false;
               }
 
@@ -1040,7 +1067,7 @@
 
               }
 
-            else if  (yytoken ==  Token_RBRACE
+            else if  (yytoken ==  Token_LBRACE
                       ||  yytoken ==  Token_COLON)
               {
                 scope_body_ast *__node_19 =  0;
@@ -1378,8 +1405,7 @@
 
     if  (yytoken ==  Token_LBRACKET
          ||  yytoken ==  Token_LBRACE
-         ||  yytoken ==  Token_LPAREN
-         ||  yytoken ==  Token_IDENTIFIER)
+         ||  yytoken ==  Token_LPAREN)
       {
         if  (yytoken ==  Token_LPAREN)
           {
@@ -1468,19 +1494,6 @@
 
           }
 
-        else if  (yytoken ==  Token_IDENTIFIER)
-          {
-            if  (yytoken !=  Token_IDENTIFIER)
-              {
-                yy_expected_token(yytoken,  Token_IDENTIFIER,  "identifier");
-                return  false;
-              }
-
-            (*yynode)->id =  token_stream->index() -  1;
-            yylex();
-
-          }
-
         else
           {
             return  false;
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_parser.h \
#690039:690040 @@ -140,7 +140,7 @@
 
       bool parse_arg_list(arg_list_ast **yynode);
       bool parse_argument(argument_ast **yynode);
-      bool parse_funcref(funcref_ast **yynode);
+      bool parse_func_var_ref(func_var_ref_ast **yynode);
       bool parse_function_args(function_args_ast **yynode);
       bool parse_function_scope(function_scope_ast **yynode);
       bool parse_id_or_value(id_or_value_ast **yynode);
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_visitor.cpp \
#690039:690040 @@ -9,7 +9,7 @@
   visitor::parser_fun_t visitor::_S_parser_table[] =  {
         reinterpret_cast<parser_fun_t>(&visitor::visit_arg_list),
         reinterpret_cast<parser_fun_t>(&visitor::visit_argument),
-        reinterpret_cast<parser_fun_t>(&visitor::visit_funcref),
+        reinterpret_cast<parser_fun_t>(&visitor::visit_func_var_ref),
         reinterpret_cast<parser_fun_t>(&visitor::visit_function_args),
         reinterpret_cast<parser_fun_t>(&visitor::visit_function_scope),
         reinterpret_cast<parser_fun_t>(&visitor::visit_id_or_value),
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/generated/qmake_visitor.h \
#690039:690040 @@ -30,7 +30,7 @@
       virtual void visit_argument(argument_ast *)
       {}
 
-      virtual void visit_funcref(funcref_ast *)
+      virtual void visit_func_var_ref(func_var_ref_ast *)
       {}
 
       virtual void visit_function_args(function_args_ast *)
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/qmake.g #690039:690040
@@ -109,19 +109,19 @@
    value_str=id_or_value | quote_val=quoted_value | ref=ref
 -> value ;;
 
-   DOUBLEDOLLAR ( varref=varref | funcref=funcref ) | SINGLEDOLLAR LPAREN \
idref=IDENTIFIER RPAREN +   DOUBLEDOLLAR ( func_var_ref=func_var_ref | varref=varref \
                ) | SINGLEDOLLAR LPAREN idref=IDENTIFIER RPAREN
 -> ref ;;
 
-   LPAREN id=IDENTIFIER RPAREN | LBRACE id=IDENTIFIER RBRACE | LBRACKET \
id=IDENTIFIER RBRACKET | id=IDENTIFIER +   LPAREN id=IDENTIFIER RPAREN | LBRACE \
                id=IDENTIFIER RBRACE | LBRACKET id=IDENTIFIER RBRACKET
 -> varref ;;
 
-   id=IDENTIFIER args=function_args
--> funcref ;;
+   id=IDENTIFIER ( args=function_args | 0 )
+-> func_var_ref ;;
 
    val=IDENTIFIER | val=VALUE
 -> id_or_value ;;
 
-   QUOTE ( value=quote_value )* ( QUOTE | 0 )
+   QUOTE ( value=quote_value )* ( QUOTE | CONT NEWLINE )
 -> quoted_value ;;
 
    value_str=id_or_value | ref=ref | token=QUOTEDSPACE | token=COLON | token=COMMA
@@ -139,7 +139,7 @@
    value_str=id_or_value | quoted_val=quoted_value | ref=ref
 -> argument ;;
 
-   RBRACE ( NEWLINE | 0 ) ( #stmts=stmt )* LBRACE | COLON #stmts=stmt
+    LBRACE ( NEWLINE | 0 ) ( #stmts=stmt )* RBRACE | COLON #stmts=stmt
 -> scope_body ;;
 
 -----------------------------------------------------------------
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/qmakedebugvisitor.cpp \
#690039:690040 @@ -67,12 +67,12 @@
     kDebug(9024) << getIndent() << "END(argument)( " << \
getTokenInfo(node->end_token)  << " )" << endl;  }
 
-void DebugVisitor::visit_funcref( funcref_ast *node )
+void DebugVisitor::visit_func_var_ref( func_var_ref_ast *node )
 {
     kDebug(9024) << getIndent() << "BEGIN(funcref)( " << \
getTokenInfo(node->start_token)  << " )" << endl;  indent++;
     kDebug(9024) << getIndent() << "id=" << getTokenInfo(node->id) << endl;
-    default_visitor::visit_funcref( node );
+    default_visitor::visit_func_var_ref( node );
     indent--;
     kDebug(9024) << getIndent() << "END(funcref)( " << getTokenInfo(node->end_token) \
<< " )" << endl;  }
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/qmakedebugvisitor.h \
#690039:690040 @@ -35,7 +35,7 @@
     DebugVisitor(QMake::parser* parser);
     virtual void visit_arg_list( arg_list_ast *node );
     virtual void visit_argument( argument_ast *node );
-    virtual void visit_funcref( funcref_ast *node );
+    virtual void visit_func_var_ref( func_var_ref_ast *node );
     virtual void visit_function_args( function_args_ast *node );
     virtual void visit_function_scope( function_scope_ast *node );
     virtual void visit_id_or_value( id_or_value_ast *node );
--- trunk/KDE/kdevelop/buildtools/managers/qmake/parser/qmakelexer.cpp #690039:690040
@@ -31,6 +31,7 @@
 namespace QMake
 {
 
+//@TODO: Lex and parse ! in default state
 
 Lexer::Lexer( parser* _parser, const QString& content ):
         mContent(content), mParser(_parser),


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic