language: euclidean modulo and remainder infix operators (#3)

This commit is contained in:
a dinosaur
2023-09-10 12:41:20 +10:00
committed by GitHub
parent 03c278f5b1
commit 0024a8b141
5 changed files with 34 additions and 7 deletions

View File

@ -167,7 +167,9 @@ class Parser(source: PeekableSource<Token>, val attribution: NodeAttribution) {
TokenType.Multiply,
TokenType.Divide,
TokenType.Equality,
TokenType.Inequality
TokenType.Inequality,
TokenType.Mod,
TokenType.Rem
)
) {
within {
@ -264,6 +266,8 @@ class Parser(source: PeekableSource<Token>, val attribution: NodeAttribution) {
TokenType.Divide -> InfixOperator.Divide
TokenType.Equality -> InfixOperator.Equals
TokenType.Inequality -> InfixOperator.NotEquals
TokenType.Mod -> InfixOperator.EuclideanModulo
TokenType.Rem -> InfixOperator.Remainder
else -> throw RuntimeException("Unknown Infix Operator")
}

View File

@ -26,6 +26,8 @@ enum class TokenType(vararg properties: TokenTypeProperty) {
LeftParentheses(SingleChar('(')),
RightParentheses(SingleChar(')')),
Negation(SingleChar('!'), Promotion('=', Inequality), OperatorFamily),
Mod(Keyword("mod"), OperatorFamily),
Rem(Keyword("rem"), OperatorFamily),
Comma(SingleChar(',')),
Period(SingleChar('.')),
False(Keyword("false"), KeywordFamily),