Bitshift
Some checks failed
Test / build (push) Waiting to run
Build / build (push) Has been cancelled

This commit is contained in:
Chuck Smith
2024-03-24 16:22:11 -04:00
parent a08fc1520c
commit 3c66b980e7
11 changed files with 76 additions and 12 deletions

View File

@@ -14,17 +14,18 @@ const (
OR
AND
NOT
ASSIGN // := or =
EQUALS // ==
LESSGREATER // > or <
BITWISE_OR // |
BITWISE_XOR // ^
BITWISE_AND // &
SUM // + or -
PRODUCT // * or / or %
PREFIX // -X or !X
CALL // myFunction(X)
INDEX // array[index]
ASSIGN // := or =
EQUALS // ==
LESSGREATER // > or <
BITWISE_OR // |
BITWISE_XOR // ^
BITWISE_AND // &
BITWISE_SHIFT // << or >>
SUM // + or -
PRODUCT // * or / or %
PREFIX // -X or !X
CALL // myFunction(X)
INDEX // array[index]
)
var precedences = map[token.TokenType]int{
@@ -42,6 +43,8 @@ var precedences = map[token.TokenType]int{
token.BITWISE_OR: BITWISE_OR,
token.BITWISE_XOR: BITWISE_XOR,
token.BITWISE_AND: BITWISE_AND,
token.LEFT_SHIFT: BITWISE_SHIFT,
token.RIGHT_SHIFT: BITWISE_SHIFT,
token.PLUS: SUM,
token.MINUS: SUM,
token.DIVIDE: PRODUCT,
@@ -112,6 +115,9 @@ func New(l *lexer.Lexer) *Parser {
p.registerInfix(token.BITWISE_XOR, p.parseInfixExpression)
p.registerInfix(token.BITWISE_AND, p.parseInfixExpression)
p.registerInfix(token.LEFT_SHIFT, p.parseInfixExpression)
p.registerInfix(token.RIGHT_SHIFT, p.parseInfixExpression)
p.registerPrefix(token.NOT, p.parsePrefixExpression)
p.registerInfix(token.OR, p.parseInfixExpression)
p.registerInfix(token.AND, p.parseInfixExpression)