From d35a37a449d31e6f4b43b937abf7b0e1fc497828 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 16 Jun 2016 20:21:25 +0300 Subject: Grammar now uses reverse polish notation --- test/MainTest.java | 3 +- test/core/parser/ParserTest.java | 21 +++++------- test/core/tokenizer/TokenizerTest.java | 63 +++------------------------------- 3 files changed, 16 insertions(+), 71 deletions(-) (limited to 'test') diff --git a/test/MainTest.java b/test/MainTest.java index 256998d..d6171a5 100644 --- a/test/MainTest.java +++ b/test/MainTest.java @@ -1,6 +1,7 @@ package com.jantuomi.interpreter.test; import com.jantuomi.interpreter.main.Main; +import com.jantuomi.interpreter.main.exception.InterpreterException; import org.junit.Test; import static org.junit.Assert.assertFalse; @@ -23,7 +24,7 @@ public class MainTest { } @Test - public void testWholeProcedure() { + public void testWholeProcedure() throws InterpreterException { String input = "x <- 1 + 2"; Main.run(input); } diff --git a/test/core/parser/ParserTest.java b/test/core/parser/ParserTest.java index 913896e..9dc51e3 100644 --- a/test/core/parser/ParserTest.java +++ b/test/core/parser/ParserTest.java @@ -1,8 +1,9 @@ package com.jantuomi.interpreter.test.core.parser; import com.jantuomi.interpreter.main.core.parser.Parser; -import com.jantuomi.interpreter.main.core.parser.ast.ASTNode; import com.jantuomi.interpreter.main.core.tokenizer.token.Token; +import com.jantuomi.interpreter.main.core.tokenizer.token.types.AdditionToken; +import com.jantuomi.interpreter.main.core.tokenizer.token.types.IntegerLiteralToken; import org.junit.Test; import java.util.Arrays; @@ -14,21 +15,17 @@ import java.util.List; public class ParserTest { @Test - public void parseAssignment() throws Exception { + public void testParseAddition() throws Exception { List tokens = Arrays.asList( - new Token(Token.Type.SymbolToken, "x"), - new Token(Token.Type.AssignmentToken), - new Token(Token.Type.SymbolToken, "y"), - new Token(Token.Type.AdditionToken), - new Token(Token.Type.SymbolToken, "x"), - new Token(Token.Type.AdditionToken), - new Token(Token.Type.IntegerLiteralToken, "1") + new IntegerLiteralToken("1"), + new IntegerLiteralToken("2"), + new AdditionToken() ); Parser parser = Parser.getInstance(); - List sequence = parser.parse(tokens); - for (ASTNode e : sequence) { - parser.printTree(e); + List sequence = parser.parse(tokens); + for (Token t : sequence) { + parser.printTree(t); } } } \ No newline at end of file diff --git a/test/core/tokenizer/TokenizerTest.java b/test/core/tokenizer/TokenizerTest.java index 7b29020..4274a93 100644 --- a/test/core/tokenizer/TokenizerTest.java +++ b/test/core/tokenizer/TokenizerTest.java @@ -2,6 +2,8 @@ package com.jantuomi.interpreter.test.core.tokenizer; import com.jantuomi.interpreter.main.core.tokenizer.Tokenizer; import com.jantuomi.interpreter.main.core.tokenizer.token.Token; +import com.jantuomi.interpreter.main.core.tokenizer.token.types.IntegerLiteralToken; +import com.jantuomi.interpreter.main.exception.InterpreterException; import org.junit.Test; import java.util.List; @@ -14,67 +16,12 @@ import static org.junit.Assert.assertTrue; public class TokenizerTest { @Test - public void testTokenizeCommentAndSymbol() { - String testString = "\"string literal\"\n/*comment*/\n1 2\nsymbol_Test3"; + public void testAddition() throws InterpreterException { + String testString = "1 2 +"; List list = Tokenizer.getInstance().tokenize(testString); System.out.println(String.format("test string:\n%s", testString)); Tokenizer.printTokens(list); - assertTrue(list.contains(new Token(Token.Type.CommentToken, "comment"))); - } - - @Test - public void testTokenizeMultilineString() { - String testString = "\"this is a\nmultiline\nstring\""; - List list = Tokenizer.getInstance().tokenize(testString); - - System.out.println(String.format("test string:\n%s", testString)); - Tokenizer.printTokens(list); - assertTrue(list.contains(new Token(Token.Type.StringLiteralToken, "this is a\nmultiline\nstring"))); - } - - @Test - public void testTokenizeMath() { - String testString = "x <- (1 + 2) / 3 * 4"; - List list = Tokenizer.getInstance().tokenize(testString); - - System.out.println(String.format("test string:\n%s", testString)); - Tokenizer.printTokens(list); - for (Token t : list) { - if (t.isSameType(new Token(Token.Type.AssignmentToken))) { - return; - } - } - assertTrue("No assignment token found!" == null); - } - - @Test - public void testTokenizeDeclAndAssign() { - String testString = "decl x\nx <- 1 + 2"; - List list = Tokenizer.getInstance().tokenize(testString); - - System.out.println(String.format("test string:\n%s", testString)); - Tokenizer.printTokens(list); - for (Token t : list) { - if (t.isSameType(new Token(Token.Type.DeclarationToken))) { - return; - } - } - assertTrue("No declaration token found!" == null); - } - - @Test - public void testTokenizeFunction() { - String testString = "func name(arg)\nx <- 1\nend"; - List list = Tokenizer.getInstance().tokenize(testString); - - System.out.println(String.format("test string:\n%s", testString)); - Tokenizer.printTokens(list); - for (Token t : list) { - if (t.isSameType(new Token(Token.Type.FunctionDefineToken))) { - return; - } - } - assertTrue("No function declaration token found!" == null); + assertTrue(list.contains(new IntegerLiteralToken("2"))); } } \ No newline at end of file -- cgit v1.3