Creates base of script class
This commit is contained in:
parent
37e770f1cb
commit
ad3e61128c
|
@ -5,8 +5,8 @@ set(CMAKE_CXX_STANDARD 17)
|
||||||
#add_subdirectory(extern)
|
#add_subdirectory(extern)
|
||||||
include_directories(extern)
|
include_directories(extern)
|
||||||
|
|
||||||
add_library(PorygonLang src/main.cpp src/main.h++ src/Parser/Lexer.cpp src/Parser/Lexer.hpp src/Parser/TokenKind.hpp src/Parser/Token.hpp src/Parser/Parser.cpp src/Parser/Parser.hpp src/Parser/ParsedStatements/ParsedStatement.hpp src/Parser/ParsedExpressions/ParsedExpression.hpp src/Parser/BinaryOperatorKind.hpp)
|
add_library(PorygonLang src/Parser/Lexer.cpp src/Parser/Lexer.hpp src/Parser/TokenKind.hpp src/Parser/Token.hpp src/Parser/Parser.cpp src/Parser/Parser.hpp src/Parser/ParsedStatements/ParsedStatement.hpp src/Parser/ParsedExpressions/ParsedExpression.hpp src/Parser/BinaryOperatorKind.hpp src/Script.cpp src/Script.hpp)
|
||||||
add_executable(PorygonLangTests src/main.cpp src/main.h++ src/Parser/Lexer.cpp src/Parser/Lexer.hpp src/Parser/TokenKind.hpp src/Parser/Token.hpp src/Parser/LexerTests.cpp src/Parser/Parser.cpp src/Parser/Parser.hpp src/Parser/ParsedStatements/ParsedStatement.hpp src/Parser/ParsedExpressions/ParsedExpression.hpp src/Parser/BinaryOperatorKind.hpp)
|
add_executable(PorygonLangTests src/Parser/Lexer.cpp src/Parser/Lexer.hpp src/Parser/TokenKind.hpp src/Parser/Token.hpp src/Parser/LexerTests.cpp src/Parser/Parser.cpp src/Parser/Parser.hpp src/Parser/ParsedStatements/ParsedStatement.hpp src/Parser/ParsedExpressions/ParsedExpression.hpp src/Parser/BinaryOperatorKind.hpp)
|
||||||
|
|
||||||
target_compile_definitions(PorygonLangTests PRIVATE TESTS_BUILD)
|
target_compile_definitions(PorygonLangTests PRIVATE TESTS_BUILD)
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,25 @@ TEST_CASE( "Parse simple negation", "[parser]" ) {
|
||||||
CHECK(((LiteralIntegerExpression*)operand)->GetValue() == 10);
|
CHECK(((LiteralIntegerExpression*)operand)->GetValue() == 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE( "Parse logical negation", "[parser]" ) {
|
||||||
|
vector<IToken*> v {
|
||||||
|
new SimpleToken(TokenKind::NotKeyword,0,0),
|
||||||
|
new SimpleToken(TokenKind::FalseKeyword,0,0),
|
||||||
|
new SimpleToken(TokenKind::EndOfFile,0,0)
|
||||||
|
};
|
||||||
|
Parser parser = Parser(v);
|
||||||
|
auto parsedStatements = parser.Parse() -> GetStatements();
|
||||||
|
REQUIRE(parsedStatements.size() == 1);
|
||||||
|
auto firstStatement = parsedStatements[0];
|
||||||
|
REQUIRE(firstStatement -> GetKind() == ParsedStatementKind::Expression);
|
||||||
|
auto expression = ((ParsedExpressionStatement*)firstStatement)->GetExpression();
|
||||||
|
REQUIRE(expression -> GetKind() == ParsedExpressionKind::Unary);
|
||||||
|
auto unary = ((UnaryExpression*)expression);
|
||||||
|
CHECK(unary -> GetOperatorKind() == UnaryOperatorKind::LogicalNegation);
|
||||||
|
auto operand = unary->GetOperand();
|
||||||
|
REQUIRE(operand->GetKind() == ParsedExpressionKind::LiteralBool);
|
||||||
|
CHECK(((LiteralBoolExpression*)operand)->GetValue() == false);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE( "Assert binary precedence", "[parser]" ) {
|
TEST_CASE( "Assert binary precedence", "[parser]" ) {
|
||||||
vector<IToken*> v {
|
vector<IToken*> v {
|
||||||
|
|
|
@ -28,6 +28,10 @@ public:
|
||||||
unsigned int GetLength(){
|
unsigned int GetLength(){
|
||||||
return Length;
|
return Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual ~IToken(){
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class SimpleToken : public IToken{
|
class SimpleToken : public IToken{
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
#include "Script.hpp"
|
||||||
|
|
||||||
|
Script Script::Create(string script) {
|
||||||
|
auto s = Script();
|
||||||
|
s.Parse(std::move(script));
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Script::Parse(string script) {
|
||||||
|
auto lexer = Lexer(std::move(script));
|
||||||
|
auto lexResult = lexer.Lex();
|
||||||
|
auto parser = Parser(lexResult);
|
||||||
|
auto parseResult = parser.Parse();
|
||||||
|
for (auto token : lexResult){
|
||||||
|
delete token;
|
||||||
|
}
|
||||||
|
lexResult.clear();
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef PORYGONLANG_SCRIPT_HPP
|
||||||
|
#define PORYGONLANG_SCRIPT_HPP
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "Parser/Lexer.hpp"
|
||||||
|
#include "Parser/Parser.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
class Script {
|
||||||
|
explicit Script(){
|
||||||
|
}
|
||||||
|
|
||||||
|
void Parse(string script);
|
||||||
|
public:
|
||||||
|
static Script Create(string script);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //PORYGONLANG_SCRIPT_HPP
|
|
@ -1,3 +0,0 @@
|
||||||
#include "main.h++"
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#ifndef PORYGONLANG_MAIN_H
|
|
||||||
#define PORYGONLANG_MAIN_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //PORYGONLANG_MAIN_H
|
|
Loading…
Reference in New Issue