diff options
5 files changed, 134 insertions, 130 deletions
| -rw-r--r-- | JSImpl/solution/JSImpl.vcxproj | 1 | ||||
| -rw-r--r-- | JSImpl/solution/JSImpl.vcxproj.filters | 57 | ||||
| -rw-r--r-- | JSImpl/src/Expression.h | 104 | ||||
| -rw-r--r-- | JSImpl/src/ExpressionDefinitions.h | 100 | ||||
| -rw-r--r-- | JSImpl/src/main.cpp | 2 |
diff --git a/JSImpl/solution/JSImpl.vcxproj b/JSImpl/solution/JSImpl.vcxproj index e55b38d..99b34cc 100644 --- a/JSImpl/solution/JSImpl.vcxproj +++ b/JSImpl/solution/JSImpl.vcxproj @@ -115,6 +115,7 @@ <ClInclude Include="..\src\ASTPrinter.h" /> <ClInclude Include="..\src\CommonTypes.h" /> <ClInclude Include="..\src\Expression.h" /> + <ClInclude Include="..\src\ExpressionDefinitions.h" /> <ClInclude Include="..\src\ExpressionsFwd.h" /> <ClInclude Include="..\src\ExpressionVisitor.h" /> <ClInclude Include="..\src\Lexer.h" /> diff --git a/JSImpl/solution/JSImpl.vcxproj.filters b/JSImpl/solution/JSImpl.vcxproj.filters index d56f6a1..314e0f3 100644 --- a/JSImpl/solution/JSImpl.vcxproj.filters +++ b/JSImpl/solution/JSImpl.vcxproj.filters @@ -1,53 +1,56 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + <Filter Include="Expressions"> + <UniqueIdentifier>{9e65384d-2e18-4a3f-9b02-4abf632f9f06}</UniqueIdentifier> </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> + <Filter Include="Lexer"> + <UniqueIdentifier>{177dbff8-a919-4a03-89ba-cb0a96e9e21e}</UniqueIdentifier> + </Filter> + <Filter Include="Visitors"> + <UniqueIdentifier>{948e229c-5a7a-4b3c-a75a-4b1b299c9e38}</UniqueIdentifier> + </Filter> + <Filter Include="Parser"> + <UniqueIdentifier>{cf3787a3-5a0e-49f9-9a9f-99e14b57f391}</UniqueIdentifier> </Filter> </ItemGroup> <ItemGroup> - <ClInclude Include="..\src\CommonTypes.h"> - <Filter>Header Files</Filter> + <ClInclude Include="..\src\Expression.h"> + <Filter>Expressions</Filter> + </ClInclude> + <ClInclude Include="..\src\ExpressionDefinitions.h"> + <Filter>Expressions</Filter> + </ClInclude> + <ClInclude Include="..\src\ExpressionsFwd.h"> + <Filter>Expressions</Filter> </ClInclude> <ClInclude Include="..\src\Lexer.h"> - <Filter>Header Files</Filter> + <Filter>Lexer</Filter> </ClInclude> <ClInclude Include="..\src\Parser.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\Expression.h"> - <Filter>Header Files</Filter> + <Filter>Parser</Filter> </ClInclude> <ClInclude Include="..\src\ASTPrinter.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ExpressionsFwd.h"> - <Filter>Header Files</Filter> + <Filter>Visitors</Filter> </ClInclude> <ClInclude Include="..\src\ExpressionVisitor.h"> - <Filter>Header Files</Filter> + <Filter>Visitors</Filter> </ClInclude> + <ClInclude Include="..\src\CommonTypes.h" /> </ItemGroup> <ItemGroup> - <ClCompile Include="..\src\Lexer.cpp"> - <Filter>Source Files</Filter> + <ClCompile Include="..\src\Expression.cpp"> + <Filter>Expressions</Filter> </ClCompile> - <ClCompile Include="..\src\main.cpp"> - <Filter>Source Files</Filter> + <ClCompile Include="..\src\Lexer.cpp"> + <Filter>Lexer</Filter> </ClCompile> <ClCompile Include="..\src\Parser.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\Expression.cpp"> - <Filter>Source Files</Filter> + <Filter>Parser</Filter> </ClCompile> <ClCompile Include="..\src\ASTPrinter.cpp"> - <Filter>Source Files</Filter> + <Filter>Visitors</Filter> </ClCompile> + <ClCompile Include="..\src\main.cpp" /> </ItemGroup> </Project>
\ No newline at end of file diff --git a/JSImpl/src/Expression.h b/JSImpl/src/Expression.h index 30405f7..01c9b68 100644 --- a/JSImpl/src/Expression.h +++ b/JSImpl/src/Expression.h @@ -3,6 +3,7 @@ #include "CommonTypes.h" #include "Lexer.h" #include "ExpressionVisitor.h" +#include "ExpressionDefinitions.h" class Expression : public IPLEnableShared<Expression> { @@ -40,108 +41,7 @@ class Expression : public IPLEnableShared<Expression> bool m_dummy; \ }; - -#define NO_MEMBERS(MACRO) - -#define LITERAL_BOOLEAN_MEMBERS(MACRO)\ - MACRO(bool, Value, false) - -#define LITERAL_NUMBER_MEMBERS(MACRO)\ - MACRO(double, Value, 0.0) - -#define LITERAL_STRING_MEMBERS(MACRO)\ - MACRO(IPLString, Value, "") - -#define BINARY_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Left, nullptr)\ - MACRO(ExpressionPtr, Right, nullptr)\ - MACRO(TokenType, Operator, TokenType::Invalid) - -#define UNARY_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLSharedPtr<Expression>, Expr, nullptr)\ - MACRO(TokenType, Operator, TokenType::Invalid)\ - MACRO(bool, Suffix, false) - -#define LITERAL_EXPRESSION_MEMBERS(MACRO)\ - MACRO(double, NumValue, 0.)\ - MACRO(IPLString, StringValue, "")\ - MACRO(bool, BooleanValue, false)\ - MACRO(LiteralType, Type, LiteralType::Undefined) - -#define IDENTIFIER_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLString, Name, "") - -#define VARIABLEDEFINITION_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLString, Name, "")\ - MACRO(ExpressionPtr, Value, nullptr) - -#define LIST_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) - -#define BLOCK_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) - -#define LABELED_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLString, Identifier, "")\ - MACRO(ExpressionPtr, Statement, nullptr) - -#define IF_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Condition, nullptr)\ - MACRO(ExpressionPtr, IfStatement, nullptr)\ - MACRO(ExpressionPtr, ElseStatement, nullptr) - -#define CASE_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Condition, nullptr)\ - MACRO(ExpressionPtr, Body, nullptr) - -#define SWITCH_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Condition, nullptr)\ - MACRO(IPLVector<ExpressionPtr>, Cases, IPLVector<ExpressionPtr>())\ - MACRO(ExpressionPtr, DefaultCase, nullptr) - -#define WHILE_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Condition, nullptr)\ - MACRO(ExpressionPtr, Body, nullptr)\ - MACRO(bool, DoWhile, false) - -#define FOR_EXPRESSION_MEMBERS(MACRO)\ - MACRO(ExpressionPtr, Initialization, nullptr)\ - MACRO(ExpressionPtr, Condition, nullptr)\ - MACRO(ExpressionPtr, Iteration, nullptr)\ - MACRO(ExpressionPtr, Body, nullptr) - -#define FUNCTION_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLString, Name, "")\ - MACRO(IPLVector<IPLString>, ArgumentsIdentifiers, IPLVector<IPLString>())\ - MACRO(ExpressionPtr, Body, nullptr) - -#define TOP_EXPRESSION_MEMBERS(MACRO)\ - MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) - -#define EMPTY_EXPRESSION_MEMBERS(MACRO) - -#define EXPRESSION_DEFINITION_ITERATOR(MACRO)\ - MACRO(LiteralNull, Expression, NO_MEMBERS)\ - MACRO(LiteralUndefined, Expression, NO_MEMBERS)\ - MACRO(LiteralBoolean, Expression, LITERAL_BOOLEAN_MEMBERS)\ - MACRO(LiteralNumber, Expression, LITERAL_NUMBER_MEMBERS)\ - MACRO(LiteralString, Expression, LITERAL_STRING_MEMBERS)\ - MACRO(BinaryExpression, Expression, BINARY_EXPRESSION_MEMBERS)\ - MACRO(UnaryExpression, Expression, UNARY_EXPRESSION_MEMBERS)\ - MACRO(IdentifierExpression, Expression, IDENTIFIER_EXPRESSION_MEMBERS)\ - MACRO(VariableDefinitionExpression, Expression, VARIABLEDEFINITION_EXPRESSION_MEMBERS)\ - MACRO(ListExpression, Expression, LIST_EXPRESSION_MEMBERS)\ - MACRO(BlockStatement, Expression, BLOCK_EXPRESSION_MEMBERS)\ - MACRO(LabeledStatement, Expression, LABELED_EXPRESSION_MEMBERS)\ - MACRO(IfStatement, Expression, IF_EXPRESSION_MEMBERS)\ - MACRO(SwitchStatement, Expression, SWITCH_EXPRESSION_MEMBERS)\ - MACRO(CaseStatement, Expression, CASE_EXPRESSION_MEMBERS)\ - MACRO(WhileStatement, Expression, WHILE_EXPRESSION_MEMBERS)\ - MACRO(ForStatement, Expression, FOR_EXPRESSION_MEMBERS)\ - MACRO(FunctionDeclaration, Expression, FUNCTION_EXPRESSION_MEMBERS)\ - MACRO(TopStatements, Expression, TOP_EXPRESSION_MEMBERS)\ - MACRO(EmptyExpression, Expression, EMPTY_EXPRESSION_MEMBERS) - EXPRESSION_DEFINITION_ITERATOR(GENERATE_EXPRESSION); +#undef GENERATE_EXPRESSION inline ExpressionPtr CreateEmptyExpression() { return IPLMakeSharePtr<EmptyExpression>(); } diff --git a/JSImpl/src/ExpressionDefinitions.h b/JSImpl/src/ExpressionDefinitions.h new file mode 100644 index 0000000..b1b2595 --- /dev/null +++ b/JSImpl/src/ExpressionDefinitions.h @@ -0,0 +1,100 @@ +#pragma once + +#define NO_MEMBERS(MACRO) + +#define LITERAL_BOOLEAN_MEMBERS(MACRO)\ + MACRO(bool, Value, false) + +#define LITERAL_NUMBER_MEMBERS(MACRO)\ + MACRO(double, Value, 0.0) + +#define LITERAL_STRING_MEMBERS(MACRO)\ + MACRO(IPLString, Value, "") + +#define BINARY_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Left, nullptr)\ + MACRO(ExpressionPtr, Right, nullptr)\ + MACRO(TokenType, Operator, TokenType::Invalid) + +#define UNARY_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLSharedPtr<Expression>, Expr, nullptr)\ + MACRO(TokenType, Operator, TokenType::Invalid)\ + MACRO(bool, Suffix, false) + +#define LITERAL_EXPRESSION_MEMBERS(MACRO)\ + MACRO(double, NumValue, 0.)\ + MACRO(IPLString, StringValue, "")\ + MACRO(bool, BooleanValue, false)\ + MACRO(LiteralType, Type, LiteralType::Undefined) + +#define IDENTIFIER_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLString, Name, "") + +#define VARIABLEDEFINITION_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLString, Name, "")\ + MACRO(ExpressionPtr, Value, nullptr) + +#define LIST_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) + +#define BLOCK_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) + +#define LABELED_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLString, Identifier, "")\ + MACRO(ExpressionPtr, Statement, nullptr) + +#define IF_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Condition, nullptr)\ + MACRO(ExpressionPtr, IfStatement, nullptr)\ + MACRO(ExpressionPtr, ElseStatement, nullptr) + +#define CASE_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Condition, nullptr)\ + MACRO(ExpressionPtr, Body, nullptr) + +#define SWITCH_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Condition, nullptr)\ + MACRO(IPLVector<ExpressionPtr>, Cases, IPLVector<ExpressionPtr>())\ + MACRO(ExpressionPtr, DefaultCase, nullptr) + +#define WHILE_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Condition, nullptr)\ + MACRO(ExpressionPtr, Body, nullptr)\ + MACRO(bool, DoWhile, false) + +#define FOR_EXPRESSION_MEMBERS(MACRO)\ + MACRO(ExpressionPtr, Initialization, nullptr)\ + MACRO(ExpressionPtr, Condition, nullptr)\ + MACRO(ExpressionPtr, Iteration, nullptr)\ + MACRO(ExpressionPtr, Body, nullptr) + +#define FUNCTION_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLString, Name, "")\ + MACRO(IPLVector<IPLString>, ArgumentsIdentifiers, IPLVector<IPLString>())\ + MACRO(ExpressionPtr, Body, nullptr) + +#define TOP_EXPRESSION_MEMBERS(MACRO)\ + MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>()) + +#define EXPRESSION_DEFINITION_ITERATOR(MACRO)\ + MACRO(LiteralNull, Expression, NO_MEMBERS)\ + MACRO(LiteralUndefined, Expression, NO_MEMBERS)\ + MACRO(LiteralBoolean, Expression, LITERAL_BOOLEAN_MEMBERS)\ + MACRO(LiteralNumber, Expression, LITERAL_NUMBER_MEMBERS)\ + MACRO(LiteralString, Expression, LITERAL_STRING_MEMBERS)\ + MACRO(BinaryExpression, Expression, BINARY_EXPRESSION_MEMBERS)\ + MACRO(UnaryExpression, Expression, UNARY_EXPRESSION_MEMBERS)\ + MACRO(IdentifierExpression, Expression, IDENTIFIER_EXPRESSION_MEMBERS)\ + MACRO(VariableDefinitionExpression, Expression, VARIABLEDEFINITION_EXPRESSION_MEMBERS)\ + MACRO(ListExpression, Expression, LIST_EXPRESSION_MEMBERS)\ + MACRO(BlockStatement, Expression, BLOCK_EXPRESSION_MEMBERS)\ + MACRO(LabeledStatement, Expression, LABELED_EXPRESSION_MEMBERS)\ + MACRO(IfStatement, Expression, IF_EXPRESSION_MEMBERS)\ + MACRO(SwitchStatement, Expression, SWITCH_EXPRESSION_MEMBERS)\ + MACRO(CaseStatement, Expression, CASE_EXPRESSION_MEMBERS)\ + MACRO(WhileStatement, Expression, WHILE_EXPRESSION_MEMBERS)\ + MACRO(ForStatement, Expression, FOR_EXPRESSION_MEMBERS)\ + MACRO(FunctionDeclaration, Expression, FUNCTION_EXPRESSION_MEMBERS)\ + MACRO(TopStatements, Expression, TOP_EXPRESSION_MEMBERS)\ + MACRO(EmptyExpression, Expression, NO_MEMBERS) diff --git a/JSImpl/src/main.cpp b/JSImpl/src/main.cpp index b51d1a9..586eef1 100644 --- a/JSImpl/src/main.cpp +++ b/JSImpl/src/main.cpp @@ -90,7 +90,7 @@ int main() //EXECUTE_TEST(TestVariableDeclaration); - EXECUTE_TEST(TestParseUnaryExpr); + TestParseUnaryExpr(); #if defined(_WIN32) //std::system("pause"); #endif |
