From be31006978be9c6b5da3fd188b83d427c3609cce Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Sun, 10 Sep 2023 18:18:01 +0200 Subject: [PATCH] for(;;) --- .../peeratcode/parser/java/JavaParser.java | 41 +------- test/ForCase.java | 97 +++++++++++++++++++ 2 files changed, 101 insertions(+), 37 deletions(-) create mode 100644 test/ForCase.java diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 6610774..c8417ce 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -536,40 +536,10 @@ public class JavaParser extends Parser { StateTree operation_for = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("for"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))); - StateTree operation_for_first_part = new StateTree<>(); - operation_for.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) - .then(operation_for_first_part); - StateTree operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); - operation_for_first_part.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) - .then(operation_for_second_part); - StateTree operation_for_index = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); - operation_for_index.end((a,b) -> a); - operation_for_index.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) - .end((a,b) -> a) - .multiple(function_container) - .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) - .end((a,b) -> a); - operation_for_second_part.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) - .then(operation_for_index); - operation_for.then(new RedirectStateTree<>(variable, (global, local) -> global.set(null))) - .then(operation_for_first_part); - StateTree operation_for_init = operation_for.then(new RedirectStateTree<>(type, (global, local) -> global.set(null))) - .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); - operation_for_init.then(operation_for_first_part); - operation_for.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))) - .then((validator) -> validator.validate((token) -> token.getValue().equals("="))) - .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) - .then(operation_for_first_part); - StateTree operation_foreach = operation_for_init.then((validator) -> validator.validate((token) -> token.getValue().equals(":"))) - .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) - .then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); - operation_foreach.end((a,b) -> a); - operation_foreach.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) - .end((a,b) -> a) - .multiple(function_container) - .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) - .end((a,b) -> a); + StateTree operation_for_first_part = operation_for.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); + + StateTree operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); StateTree operation_while = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("while"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))) @@ -582,10 +552,7 @@ public class JavaParser extends Parser { .end((a,b) -> a); operation_while.then(new RedirectStateTree<>(operation, (global, local) -> global.set(null))) - .end((a,b) -> { - System.out.println("JHUGYUFKHJO"); - return a; - }); + .end((a,b) -> a); operation_while.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .end((a,b) -> a); diff --git a/test/ForCase.java b/test/ForCase.java new file mode 100644 index 0000000..a6f80fa --- /dev/null +++ b/test/ForCase.java @@ -0,0 +1,97 @@ +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import be.jeffcheasey88.peeratcode.parser.Parser; +import be.jeffcheasey88.peeratcode.parser.TokenValidator; +import be.jeffcheasey88.peeratcode.parser.Tokenizer; +import be.jeffcheasey88.peeratcode.parser.java.JavaElement; +import be.jeffcheasey88.peeratcode.parser.state.InitialStateTree; +import be.jeffcheasey88.peeratcode.parser.state.StateTree; + +public class ForCase { + + private static Parser parser = new Parser(){ + { + setTokenizer(new Tokenizer()); + + InitialStateTree operation = new InitialStateTree<>(); + + StateTree operation_for = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("for"))) + .then((validator) -> validator.validate((token) -> token.getValue().equals("("))); + + StateTree operation_for_first_part = operation_for.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); + + StateTree operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); + + StateTree operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) + .end((a,b) -> a); + + setStateTree(operation); + } + }; + + void testCase(String value) throws Exception{ + TokenValidator.TOKENS = 0; + TokenValidator.MAX_VALIDATE = 0; + + parser.parse(value, new JavaElement()); + + assertEquals(TokenValidator.TOKENS, TokenValidator.MAX_VALIDATE); + } + + @Test + void empty() throws Exception{ + testCase("for(;;)"); + } + + @Test + void case1() throws Exception{ + testCase("for(i=4;;)"); + } + + @Test + void case2() throws Exception{ + testCase("for(i=4,j=3;;)"); + } + + @Test + void case3() throws Exception{ + testCase("for(int i=4;;)"); + } + + @Test + void case4() throws Exception{ + testCase("for(int i=4,j=3;;)"); + } + + @Test + void case5() throws Exception{ + testCase("for(int i;;)"); + } + + @Test + void case6() throws Exception{ + testCase("for(int i =0,j;;)"); + } + + @Test + void case7() throws Exception{ + testCase("for(;value;)"); + } + + @Test + void case8() throws Exception{ + testCase("for(;;i++)"); + } + + @Test + void case9() throws Exception{ + testCase("for(final int i = 4;;i++)"); + } + + @Test + void case10() throws Exception{ + testCase("for(private static final int i=4,k;value;)"); + } +}