mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-17 08:55:05 -04:00
added repeat until
This commit is contained in:
parent
1b6c3d6e64
commit
a09ca163b3
@ -168,6 +168,16 @@ public class Parser {
|
||||
return c -> {
|
||||
while (Value.toBool(cond.value(c))) inner.execute(c);
|
||||
};
|
||||
} else if (nextIs(REPEAT)) {
|
||||
Statement inner = parseStatement();
|
||||
expect(UNTIL);
|
||||
Expression cond = parseExpression();
|
||||
if (isRealStatement) expect(SEMICOLON);
|
||||
return c -> {
|
||||
do {
|
||||
inner.execute(c);
|
||||
} while (!Value.toBool(cond.value(c)));
|
||||
};
|
||||
} else if (nextIs(OPENBRACE)) {
|
||||
Statements s = new Statements();
|
||||
while (!nextIs(CLOSEDBRACE))
|
||||
|
@ -17,7 +17,8 @@ class Tokenizer {
|
||||
enum Token {
|
||||
UNKNOWN, IDENT, AND, OR, XOR, NOT, OPEN, CLOSE, NUMBER, EOL, EOF, SHIFTLEFT, SHIFTRIGHT, COMMA, EQUAL,
|
||||
ADD, SUB, MUL, GREATER, LESS, DIV, MOD, END, IF, ELSE, FOR, WHILE, SEMICOLON, NOTEQUAL, STRING,
|
||||
OPENBRACE, CLOSEDBRACE, CODEEND, OPENSQUARE, CLOSEDSQUARE, DOT, PRINT, STATIC, FUNC, PRINTF, GREATEREQUAL, LESSEQUAL, PANIC
|
||||
OPENBRACE, CLOSEDBRACE, CODEEND, OPENSQUARE, CLOSEDSQUARE, DOT, PRINT, STATIC, FUNC, PRINTF,
|
||||
GREATEREQUAL, LESSEQUAL, REPEAT, UNTIL, PANIC
|
||||
}
|
||||
|
||||
private static HashMap<String, Token> statementMap = new HashMap<>();
|
||||
@ -31,6 +32,8 @@ class Tokenizer {
|
||||
statementMap.put("printf", Token.PRINTF);
|
||||
statementMap.put("func", Token.FUNC);
|
||||
statementMap.put("panic", Token.PANIC);
|
||||
statementMap.put("repeat", Token.REPEAT);
|
||||
statementMap.put("until", Token.UNTIL);
|
||||
}
|
||||
|
||||
private final Reader in;
|
||||
|
@ -184,6 +184,11 @@ public class ParserTest extends TestCase {
|
||||
assertEquals("Hello 0123456789 World!", c.toString());
|
||||
}
|
||||
|
||||
public void testParseTemplateRepeat() throws IOException, ParserException, HGSEvalException {
|
||||
Context c = exec("Hello <? i=0; repeat { =i; i++; } until i=10; ?> World!");
|
||||
assertEquals("Hello 0123456789 World!", c.toString());
|
||||
}
|
||||
|
||||
public void testParseTemplateArray() throws IOException, ParserException, HGSEvalException {
|
||||
Context c = exec("<? a=newList(); a[0]=1; a[1]=7; print(a[1], \",\" ,sizeOf(a)); ?>;");
|
||||
assertEquals("7,2;", c.toString());
|
||||
|
Loading…
x
Reference in New Issue
Block a user