[Avida-SVN] r2463 - development/source/script

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Mon Mar 17 21:12:42 PDT 2008


Author: brysonda
Date: 2008-03-18 00:12:42 -0400 (Tue, 18 Mar 2008)
New Revision: 2463

Modified:
   development/source/script/ASTree.cc
   development/source/script/ASTree.h
   development/source/script/AvidaScript.h
   development/source/script/cASTVisitor.h
   development/source/script/cDirectInterpretASTVisitor.cc
   development/source/script/cDirectInterpretASTVisitor.h
   development/source/script/cDumpASTVisitor.cc
   development/source/script/cDumpASTVisitor.h
   development/source/script/cLexer.l
   development/source/script/cParser.cc
   development/source/script/cParser.h
   development/source/script/cSemanticASTVisitor.cc
   development/source/script/cSemanticASTVisitor.h
Log:
AS:
Stub in parser support for literal dicts.

Modified: development/source/script/ASTree.cc
===================================================================
--- development/source/script/ASTree.cc	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/ASTree.cc	2008-03-18 04:12:42 UTC (rev 2463)
@@ -53,6 +53,7 @@
 void cASTFunctionCall::Accept(cASTVisitor& visitor) { visitor.VisitFunctionCall(*this); }
 void cASTLiteral::Accept(cASTVisitor& visitor) { visitor.VisitLiteral(*this); }
 void cASTLiteralArray::Accept(cASTVisitor& visitor) { visitor.VisitLiteralArray(*this); }
+void cASTLiteralDict::Accept(cASTVisitor& visitor) { visitor.VisitLiteralDict(*this); }
 void cASTObjectCall::Accept(cASTVisitor& visitor) { visitor.VisitObjectCall(*this); }
 void cASTObjectReference::Accept(cASTVisitor& visitor) { visitor.VisitObjectReference(*this); }
 void cASTVariableReference::Accept(cASTVisitor& visitor) { visitor.VisitVariableReference(*this); }

Modified: development/source/script/ASTree.h
===================================================================
--- development/source/script/ASTree.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/ASTree.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -118,6 +118,7 @@
 class cASTFunctionCall;
 class cASTLiteral;
 class cASTLiteralArray;
+class cASTLiteralDict;
 class cASTObjectCall;
 class cASTObjectReference;
 class cASTVariableReference;
@@ -556,6 +557,24 @@
 };
 
 
+class cASTLiteralDict : public cASTNode
+{
+private:
+  sASTypeInfo m_type;
+  
+public:
+  cASTLiteralDict(const cASFilePosition& fp) : cASTNode(fp), m_type(AS_TYPE_DICT) { ; }
+  ~cASTLiteralDict() { ; }  
+  
+  void AddMapping(cASTNode* idx, cASTNode* val) { /* @TODO */ }
+  
+  
+  const sASTypeInfo& GetType() const { return m_type; }
+  
+  void Accept(cASTVisitor& visitor);
+};
+
+
 class cASTObjectCall : public cASTNode
 {
 private:

Modified: development/source/script/AvidaScript.h
===================================================================
--- development/source/script/AvidaScript.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/AvidaScript.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -69,9 +69,10 @@
   AS_TOKEN_ARR_EXPAN,
   AS_TOKEN_ARR_WILD,
   
-  AS_TOKEN_MAT_MODIFY, // 33
+  AS_TOKEN_LITERAL_DICT, // 33
+  AS_TOKEN_LITERAL_MATRIX,
   
-  AS_TOKEN_TYPE_ARRAY, // 34
+  AS_TOKEN_TYPE_ARRAY, // 35
   AS_TOKEN_TYPE_BOOL,
   AS_TOKEN_TYPE_CHAR,
   AS_TOKEN_TYPE_DICT,
@@ -82,27 +83,27 @@
   AS_TOKEN_TYPE_VAR,
   AS_TOKEN_TYPE_VOID,
   
-  AS_TOKEN_CMD_IF, // 44
+  AS_TOKEN_CMD_IF, // 45
   AS_TOKEN_CMD_ELSE,
   AS_TOKEN_CMD_ELSEIF,
   AS_TOKEN_CMD_WHILE,
   AS_TOKEN_CMD_FOREACH,
   AS_TOKEN_CMD_FUNCTION,
   
-  AS_TOKEN_CMD_RETURN, // 50
+  AS_TOKEN_CMD_RETURN, // 51
   
-  AS_TOKEN_BUILTIN_CALL, // 51
+  AS_TOKEN_BUILTIN_CALL, // 52
   AS_TOKEN_BUILTIN_METHOD,
   
-  AS_TOKEN_ID, // 53
+  AS_TOKEN_ID, // 54
   
-  AS_TOKEN_FLOAT, // 54
+  AS_TOKEN_FLOAT, // 55
   AS_TOKEN_INT,
   AS_TOKEN_STRING,
   AS_TOKEN_CHAR,
   AS_TOKEN_BOOL,
   
-  AS_TOKEN_UNKNOWN, // 58
+  AS_TOKEN_UNKNOWN, // 59
   AS_TOKEN_INVALID
 } ASToken_t;
 

Modified: development/source/script/cASTVisitor.h
===================================================================
--- development/source/script/cASTVisitor.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cASTVisitor.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -57,6 +57,7 @@
   virtual void VisitFunctionCall(cASTFunctionCall&) = 0;
   virtual void VisitLiteral(cASTLiteral&) = 0;
   virtual void VisitLiteralArray(cASTLiteralArray&) = 0;
+  virtual void VisitLiteralDict(cASTLiteralDict&) = 0;
   virtual void VisitObjectCall(cASTObjectCall&) = 0;
   virtual void VisitObjectReference(cASTObjectReference&) = 0;
   virtual void VisitVariableReference(cASTVariableReference&) = 0;

Modified: development/source/script/cDirectInterpretASTVisitor.cc
===================================================================
--- development/source/script/cDirectInterpretASTVisitor.cc	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cDirectInterpretASTVisitor.cc	2008-03-18 04:12:42 UTC (rev 2463)
@@ -1047,6 +1047,11 @@
   }
 }
 
+void cDirectInterpretASTVisitor::VisitLiteralDict(cASTLiteralDict& node)
+{
+  // @TODO - handle literal dict
+  INTERPRET_ERROR(INTERNAL);
+}
 
 void cDirectInterpretASTVisitor::VisitObjectCall(cASTObjectCall& node)
 {

Modified: development/source/script/cDirectInterpretASTVisitor.h
===================================================================
--- development/source/script/cDirectInterpretASTVisitor.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cDirectInterpretASTVisitor.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -103,6 +103,7 @@
   void VisitFunctionCall(cASTFunctionCall&);
   void VisitLiteral(cASTLiteral&);
   void VisitLiteralArray(cASTLiteralArray&);
+  void VisitLiteralDict(cASTLiteralDict&);
   void VisitObjectCall(cASTObjectCall&);
   void VisitObjectReference(cASTObjectReference&);
   void VisitVariableReference(cASTVariableReference&);

Modified: development/source/script/cDumpASTVisitor.cc
===================================================================
--- development/source/script/cDumpASTVisitor.cc	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cDumpASTVisitor.cc	2008-03-18 04:12:42 UTC (rev 2463)
@@ -386,6 +386,12 @@
 }
 
 
+void cDumpASTVisitor::VisitLiteralDict(cASTLiteralDict& node)
+{
+  // @TODO - literal dict
+}
+
+
 void cDumpASTVisitor::VisitObjectCall(cASTObjectCall& node)
 {
   indent();

Modified: development/source/script/cDumpASTVisitor.h
===================================================================
--- development/source/script/cDumpASTVisitor.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cDumpASTVisitor.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -58,6 +58,7 @@
   void VisitFunctionCall(cASTFunctionCall&);
   void VisitLiteral(cASTLiteral&);
   void VisitLiteralArray(cASTLiteralArray&);
+  void VisitLiteralDict(cASTLiteralDict&);
   void VisitObjectCall(cASTObjectCall&);
   void VisitObjectReference(cASTObjectReference&);
   void VisitVariableReference(cASTVariableReference&);

Modified: development/source/script/cLexer.l
===================================================================
--- development/source/script/cLexer.l	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cLexer.l	2008-03-18 04:12:42 UTC (rev 2463)
@@ -83,7 +83,8 @@
 \^          return AS_TOKEN_ARR_EXPAN;
 \.\.        return AS_TOKEN_ARR_WILD;
 
-\$          return AS_TOKEN_MAT_MODIFY;    // Matrix Modifier
+@\{         return AS_TOKEN_LITERAL_DICT;  // Aggregate literals
+\$\{        return AS_TOKEN_LITERAL_MATRIX;
 
 array       return AS_TOKEN_TYPE_ARRAY;    // Built-in Types
 bool        return AS_TOKEN_TYPE_BOOL;

Modified: development/source/script/cParser.cc
===================================================================
--- development/source/script/cParser.cc	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cParser.cc	2008-03-18 04:12:42 UTC (rev 2463)
@@ -630,8 +630,13 @@
       if (expr.IsNull()) PARSE_ERROR(NULL_EXPR);
       if (currentToken() != TOKEN(PREC_CLOSE)) PARSE_UNEXPECT();
       break;
-    case TOKEN(MAT_MODIFY):
-      if (nextToken() != TOKEN(ARR_OPEN)) PARSE_UNEXPECT();
+      
+    case TOKEN(LITERAL_DICT):
+      expr.Set(parseLiteralDict());
+      if (currentToken() != TOKEN(ARR_CLOSE)) PARSE_UNEXPECT();
+      break;
+
+    case TOKEN(LITERAL_MATRIX):
       is_matrix = true;
     case TOKEN(ARR_OPEN):
       {
@@ -857,6 +862,25 @@
   return is.Release();
 }
 
+
+cASTNode* cParser::parseLiteralDict()
+{
+  PARSE_TRACE("parseLiteralDict");
+  cASTLiteralDict* ld = new cASTLiteralDict(FILEPOS);
+  
+  if (nextToken() != TOKEN(ARR_CLOSE)) {
+    do {
+      cASTNode* idxexpr = parseExpression();
+      if (currentToken() != TOKEN(ARR_RANGE)) PARSE_UNEXPECT();
+      cASTNode* valexpr = parseExpression();
+      
+      ld->AddMapping(idxexpr, valexpr);
+    } while (currentToken() == TOKEN(COMMA) && nextToken());
+  }
+  
+  return ld;
+}
+
 cASTNode* cParser::parseLooseBlock()
 {
   PARSE_TRACE("parseLooseBlock");

Modified: development/source/script/cParser.h
===================================================================
--- development/source/script/cParser.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cParser.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -93,6 +93,7 @@
   cASTNode* parseIDStatement();
   cASTNode* parseIfStatement();
   cASTNode* parseIndexExpression();
+  cASTNode* parseLiteralDict();
   cASTNode* parseLooseBlock();
   cASTNode* parseRefStatement();
   cASTNode* parseReturnStatement();

Modified: development/source/script/cSemanticASTVisitor.cc
===================================================================
--- development/source/script/cSemanticASTVisitor.cc	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cSemanticASTVisitor.cc	2008-03-18 04:12:42 UTC (rev 2463)
@@ -741,6 +741,12 @@
 }
 
 
+void cSemanticASTVisitor::VisitLiteralDict(cASTLiteralDict& node)
+{
+  // @TODO - literal dict
+}
+
+
 void cSemanticASTVisitor::VisitObjectCall(cASTObjectCall& node)
 {
   // @TODO - object call

Modified: development/source/script/cSemanticASTVisitor.h
===================================================================
--- development/source/script/cSemanticASTVisitor.h	2008-03-18 03:32:03 UTC (rev 2462)
+++ development/source/script/cSemanticASTVisitor.h	2008-03-18 04:12:42 UTC (rev 2463)
@@ -100,6 +100,7 @@
   void VisitFunctionCall(cASTFunctionCall&);
   void VisitLiteral(cASTLiteral&);
   void VisitLiteralArray(cASTLiteralArray&);
+  void VisitLiteralDict(cASTLiteralDict&);
   void VisitObjectCall(cASTObjectCall&);
   void VisitObjectReference(cASTObjectReference&);
   void VisitVariableReference(cASTVariableReference&);




More information about the Avida-cvs mailing list