[orx-expression-evaluator-typed] Add range operators

This commit is contained in:
Edwin Jakobs
2024-08-08 10:01:07 +02:00
parent eaa71a61bd
commit 8529825d34
5 changed files with 167 additions and 7 deletions

View File

@@ -7,6 +7,14 @@ NEWLINE : '\r\n' | '\r' | '\n' ;
WS : [\t ]+ -> channel(WHITESPACE) ;
RANGE_INCLUSIVE : '..' ;
RANGE_EXCLUSIVE_UNTIL : 'until' ;
RANGE_EXCLUSIVE : '..<' ;
RANGE_DOWNTO : 'downTo' ;
STEP : 'step' ;
// Identifiers
ID : [$_]*[a-zA-Z][A-Za-z0-9_]* | '`'[$_]*[A-Za-z0-9_-]*'`';
FUNCTION_ID : [$_]*[a-z][A-Za-z0-9_]* ;

View File

@@ -8,13 +8,19 @@ keyLangFile : lines=line+ ;
line : statement (NEWLINE | EOF) ;
statement :
expression # expressionStatement ;
expressionRoot # expressionStatement ;
rangeExpression: expression operator=(RANGE_INCLUSIVE|RANGE_EXCLUSIVE|RANGE_EXCLUSIVE_UNTIL|RANGE_DOWNTO) expression (step=STEP expression)?;
expressionRoot: rangeExpression
| expression
;
lambda: LCURLY (ID ( COMMA ID )* ARROW )? expression RCURLY # functionLiteral;
expression : INTLIT # intLiteral
| DECLIT # decimalLiteral
| LBRACKET (expression ( COMMA expression )*)? RBRACKET # listLiteral
| LBRACKET (expressionRoot ( COMMA expressionRoot )*)? RBRACKET # listLiteral
| expression DOT ID lambda # memberFunctionCall0LambdaExpression
| lambda # lambdaExpression
| expression DOT ID LPAREN RPAREN # memberFunctionCall0Expression
@@ -32,7 +38,7 @@ expression : INTLIT # int
| ID # valueReference
| STRING_OPEN (parts+=stringLiteralContent)* STRING_CLOSE # stringLiteral
| expression DOT ID # propReference
| LPAREN expression RPAREN # parenExpression
| LPAREN expressionRoot RPAREN # parenExpression
| MINUS expression # minusExpression
| NOT expression # negateExpression
| expression operator=(DIVISION|ASTERISK|PERCENTAGE) expression # binaryOperation1