Implemented comparison equality operators
This commit is contained in:
@@ -2,12 +2,21 @@
|
||||
#ifndef PORYGONLANG_BINARYOPERATORKIND_HPP
|
||||
#define PORYGONLANG_BINARYOPERATORKIND_HPP
|
||||
enum class BinaryOperatorKind{
|
||||
// Math
|
||||
Addition,
|
||||
Subtraction,
|
||||
Multiplication,
|
||||
Division,
|
||||
|
||||
// Equality
|
||||
Equality,
|
||||
Inequality,
|
||||
Less,
|
||||
LessOrEquals,
|
||||
Greater,
|
||||
GreaterOrEquals,
|
||||
|
||||
// Logical
|
||||
LogicalAnd,
|
||||
LogicalOr,
|
||||
};
|
||||
|
||||
@@ -79,6 +79,18 @@ IToken* Lexer::LexNext(char c){
|
||||
return new SimpleToken(TokenKind::EqualityToken, this -> _position - 2, 2);
|
||||
}
|
||||
return new SimpleToken(TokenKind::AssignmentToken, this -> _position - 1, 1);
|
||||
case '<':
|
||||
if (Lexer::Peek() == '='){
|
||||
Lexer::Next();
|
||||
return new SimpleToken(TokenKind::LessEquals, this -> _position - 2, 2);
|
||||
}
|
||||
return new SimpleToken(TokenKind::Less, this -> _position - 1, 1);
|
||||
case '>':
|
||||
if (Lexer::Peek() == '='){
|
||||
Lexer::Next();
|
||||
return new SimpleToken(TokenKind::GreaterEquals, this -> _position - 2, 2);
|
||||
}
|
||||
return new SimpleToken(TokenKind::Greater, this -> _position - 1, 1);
|
||||
case '~':
|
||||
if (Lexer::Peek() == '='){
|
||||
Lexer::Next();
|
||||
|
||||
@@ -223,12 +223,21 @@ UnaryOperatorKind GetUnaryOperatorKind(TokenKind kind){
|
||||
|
||||
BinaryOperatorKind GetBinaryOperatorKind(TokenKind kind){
|
||||
switch (kind){
|
||||
// Math operators
|
||||
case TokenKind::PlusToken: return BinaryOperatorKind ::Addition;
|
||||
case TokenKind::MinusToken: return BinaryOperatorKind ::Subtraction;
|
||||
case TokenKind::StarToken: return BinaryOperatorKind ::Multiplication;
|
||||
case TokenKind::SlashToken: return BinaryOperatorKind ::Division;
|
||||
|
||||
// Equality operators
|
||||
case TokenKind::EqualityToken: return BinaryOperatorKind ::Equality;
|
||||
case TokenKind::InequalityToken: return BinaryOperatorKind ::Inequality;
|
||||
case TokenKind ::Less: return BinaryOperatorKind ::Less;
|
||||
case TokenKind ::LessEquals: return BinaryOperatorKind ::LessOrEquals;
|
||||
case TokenKind ::Greater: return BinaryOperatorKind ::Greater;
|
||||
case TokenKind ::GreaterEquals: return BinaryOperatorKind ::GreaterOrEquals;
|
||||
|
||||
// logical operators
|
||||
case TokenKind::AndKeyword: return BinaryOperatorKind ::LogicalAnd;
|
||||
case TokenKind::OrKeyword: return BinaryOperatorKind ::LogicalOr;
|
||||
default: // This should never trigger, so throw.
|
||||
@@ -238,12 +247,22 @@ BinaryOperatorKind GetBinaryOperatorKind(TokenKind kind){
|
||||
|
||||
OperatorPrecedence GetBinaryPrecedence(TokenKind kind){
|
||||
switch (kind){
|
||||
// Math
|
||||
case TokenKind::PlusToken: return OperatorPrecedence ::Additive;
|
||||
case TokenKind::MinusToken: return OperatorPrecedence ::Additive;
|
||||
case TokenKind::StarToken: return OperatorPrecedence ::Multiplication;
|
||||
case TokenKind::SlashToken: return OperatorPrecedence ::Multiplication;
|
||||
|
||||
// Equality
|
||||
case TokenKind::EqualityToken: return OperatorPrecedence ::Equality;
|
||||
case TokenKind::InequalityToken: return OperatorPrecedence ::Equality;
|
||||
case TokenKind ::Less: return OperatorPrecedence ::Equality;
|
||||
case TokenKind ::LessEquals: return OperatorPrecedence ::Equality;
|
||||
case TokenKind ::Greater: return OperatorPrecedence ::Equality;
|
||||
case TokenKind ::GreaterEquals: return OperatorPrecedence ::Equality;
|
||||
|
||||
|
||||
// Logical
|
||||
case TokenKind::AndKeyword: return OperatorPrecedence ::LogicalAnd;
|
||||
case TokenKind::OrKeyword: return OperatorPrecedence ::LogicalOr;
|
||||
default:
|
||||
|
||||
@@ -13,6 +13,11 @@ enum class TokenKind{
|
||||
AssignmentToken,
|
||||
EqualityToken,
|
||||
InequalityToken,
|
||||
Less,
|
||||
LessEquals,
|
||||
Greater,
|
||||
GreaterEquals,
|
||||
|
||||
OpenParenthesis,
|
||||
CloseParenthesis,
|
||||
OpenSquareBracket,
|
||||
|
||||
Reference in New Issue
Block a user