Fixed up raw function
This commit is contained in:
@@ -28,10 +28,10 @@ i u32 <- 0, rep text[i] != 0:
|
|||||||
ret num1 + num2
|
ret num1 + num2
|
||||||
;*/
|
;*/
|
||||||
|
|
||||||
/*rawAdd raw<"=r,r,r">: num1 sint32, num2 sint32 -> sint32
|
rawAdd raw<"=r,r,r">: num1 sint32, num2 sint32 -> sint32
|
||||||
add $1, $2
|
add $1, $2
|
||||||
mov $0, $1
|
mov $0, $1
|
||||||
;*/
|
;
|
||||||
|
|
||||||
/*rawAdd raw: num1 sint32, num2 sint32 -> sint32
|
/*rawAdd raw: num1 sint32, num2 sint32 -> sint32
|
||||||
add $1, $2
|
add $1, $2
|
||||||
@@ -48,11 +48,11 @@ i u32 <- 0, rep text[i] != 0:
|
|||||||
|
|
||||||
;*/
|
;*/
|
||||||
|
|
||||||
main fun: a sint32, b sint32 -> sint32
|
main fun -> sint32
|
||||||
//printChar()
|
a sint32 <- 4
|
||||||
|
b sint32 <- 5
|
||||||
|
|
||||||
res1 sint32 <- a - b
|
res sint32 <- rawAdd(4, 5)
|
||||||
//res2 sint32 <- rawAdd(4, 5)
|
|
||||||
|
|
||||||
ret res1
|
ret res
|
||||||
;
|
;
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#include "Parsee.h"
|
#include "Parsee.h"
|
||||||
|
|
||||||
#include "Parser/Expression/Expression.h"
|
|
||||||
|
|
||||||
Parsee Parsee::tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn) {
|
Parsee Parsee::tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn) {
|
||||||
Parsee parsee;
|
Parsee parsee;
|
||||||
parsee.kind = ParseeKind::TOKEN;
|
parsee.kind = ParseeKind::TOKEN;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
enum class TokenKind;
|
enum class TokenKind;
|
||||||
class Expression;
|
|
||||||
|
|
||||||
enum class ParseeKind {
|
enum class ParseeKind {
|
||||||
TOKEN,
|
TOKEN,
|
||||||
|
|||||||
@@ -297,9 +297,8 @@ shared_ptr<Statement> Parser::matchStatementFunction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
||||||
return nullptr;
|
bool hasError = false;
|
||||||
/*bool hasError = false;
|
ParseeResultsGroup resultsGroup;
|
||||||
optional<vector<ParseeResult>> parseeResults;
|
|
||||||
|
|
||||||
string name;
|
string name;
|
||||||
string constraints;
|
string constraints;
|
||||||
@@ -308,9 +307,8 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
string rawSource;
|
string rawSource;
|
||||||
|
|
||||||
// identifier
|
// identifier
|
||||||
parseeResults = parseeResultsForParseeGroup(
|
resultsGroup = parseeResultsGroupForParseeGroup(
|
||||||
ParseeGroup(
|
ParseeGroup(
|
||||||
true,
|
|
||||||
{
|
{
|
||||||
Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true),
|
Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true),
|
||||||
Parsee::tokenParsee(TokenKind::RAW_FUNCTION, true, false)
|
Parsee::tokenParsee(TokenKind::RAW_FUNCTION, true, false)
|
||||||
@@ -318,17 +316,23 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (parseeResults) {
|
|
||||||
name = (*parseeResults).at(0).getToken()->getLexme();
|
switch (resultsGroup.getKind()) {
|
||||||
} else {
|
case ParseeResultsGroupKind::SUCCESS:
|
||||||
|
name = resultsGroup.getResults().at(0).getToken()->getLexme();
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::NO_MATCH:
|
||||||
|
return nullptr;
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::FAILURE:
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// options
|
// constraints
|
||||||
if (!hasError) {
|
if (!hasError) {
|
||||||
parseeResults = parseeResultsForParseeGroup(
|
resultsGroup = parseeResultsGroupForParseeGroup(
|
||||||
ParseeGroup(
|
ParseeGroup(
|
||||||
false,
|
|
||||||
{
|
{
|
||||||
Parsee::tokenParsee(TokenKind::LESS, true, false),
|
Parsee::tokenParsee(TokenKind::LESS, true, false),
|
||||||
Parsee::tokenParsee(TokenKind::STRING, true, true),
|
Parsee::tokenParsee(TokenKind::STRING, true, true),
|
||||||
@@ -337,18 +341,27 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (parseeResults && !(*parseeResults).empty()) {
|
|
||||||
constraints = (*parseeResults).at(0).getToken()->getLexme();
|
switch (resultsGroup.getKind()) {
|
||||||
} else if (!parseeResults) {
|
case ParseeResultsGroupKind::SUCCESS:
|
||||||
|
constraints = resultsGroup.getResults().at(0).getToken()->getLexme();
|
||||||
|
// remove enclosing quotes
|
||||||
|
if (constraints.length() >= 2)
|
||||||
|
constraints = constraints.substr(1, constraints.length() - 2);
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::NO_MATCH:
|
||||||
|
return nullptr;
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::FAILURE:
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// arguments
|
// arguments
|
||||||
if (!hasError) {
|
if (!hasError) {
|
||||||
parseeResults = parseeResultsForParseeGroup(
|
resultsGroup = parseeResultsGroupForParseeGroup(
|
||||||
ParseeGroup(
|
ParseeGroup(
|
||||||
false,
|
|
||||||
{
|
{
|
||||||
Parsee::tokenParsee(TokenKind::COLON, true, false),
|
Parsee::tokenParsee(TokenKind::COLON, true, false),
|
||||||
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
||||||
@@ -356,7 +369,6 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
Parsee::valueTypeParsee(true)
|
Parsee::valueTypeParsee(true)
|
||||||
},
|
},
|
||||||
ParseeGroup(
|
ParseeGroup(
|
||||||
false,
|
|
||||||
{
|
{
|
||||||
Parsee::tokenParsee(TokenKind::COMMA, true, false),
|
Parsee::tokenParsee(TokenKind::COMMA, true, false),
|
||||||
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
||||||
@@ -367,23 +379,27 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (parseeResults && !(*parseeResults).empty()) {
|
switch (resultsGroup.getKind()) {
|
||||||
for (int i=0; i<(*parseeResults).size(); i+=2) {
|
case ParseeResultsGroupKind::SUCCESS:
|
||||||
|
for (int i=0; i<resultsGroup.getResults().size(); i+=2) {
|
||||||
pair<string, shared_ptr<ValueType>> arg;
|
pair<string, shared_ptr<ValueType>> arg;
|
||||||
arg.first = (*parseeResults).at(i).getToken()->getLexme();
|
arg.first = resultsGroup.getResults().at(i).getToken()->getLexme();
|
||||||
arg.second = (*parseeResults).at(i+1).getValueType();
|
arg.second = resultsGroup.getResults().at(i+1).getValueType();
|
||||||
arguments.push_back(arg);
|
arguments.push_back(arg);
|
||||||
}
|
}
|
||||||
} else if (!parseeResults) {
|
break;
|
||||||
|
case ParseeResultsGroupKind::NO_MATCH:
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::FAILURE:
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// return type
|
// return type
|
||||||
if (!hasError) {
|
if (!hasError) {
|
||||||
parseeResults = parseeResultsForParseeGroup(
|
resultsGroup = parseeResultsGroupForParseeGroup(
|
||||||
ParseeGroup(
|
ParseeGroup(
|
||||||
false,
|
|
||||||
{
|
{
|
||||||
Parsee::tokenParsee(TokenKind::RIGHT_ARROW, true, false),
|
Parsee::tokenParsee(TokenKind::RIGHT_ARROW, true, false),
|
||||||
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
Parsee::tokenParsee(TokenKind::NEW_LINE, false, false),
|
||||||
@@ -393,10 +409,15 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (parseeResults && !(*parseeResults).empty()) {
|
switch (resultsGroup.getKind()) {
|
||||||
returnType = (*parseeResults).at(0).getValueType();
|
case ParseeResultsGroupKind::SUCCESS:
|
||||||
} else if (!parseeResults) {
|
returnType = resultsGroup.getResults().at(0).getValueType();
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::NO_MATCH:
|
||||||
|
break;
|
||||||
|
case ParseeResultsGroupKind::FAILURE:
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,7 +442,7 @@ shared_ptr<Statement> Parser::matchStatementRawFunction() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return make_shared<StatementRawFunction>(name, constraints, arguments, returnType, rawSource);*/
|
return make_shared<StatementRawFunction>(name, constraints, arguments, returnType, rawSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr<Statement> Parser::matchStatementBlock(vector<TokenKind> terminalTokenKinds) {
|
shared_ptr<Statement> Parser::matchStatementBlock(vector<TokenKind> terminalTokenKinds) {
|
||||||
@@ -593,7 +614,6 @@ shared_ptr<Expression> Parser::nextExpression() {
|
|||||||
if (expression != nullptr || errors.size() > errorsCount)
|
if (expression != nullptr || errors.size() > errorsCount)
|
||||||
return expression;
|
return expression;
|
||||||
|
|
||||||
//markError({}, {});
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user