[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