diff --git a/.idea/.gitignore b/.idea/.gitignore index a203e0d..3b09e94 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,5 +1,5 @@ # Default ignored files /shelf/ /workspace.xml -out\ +target/ *.class \ No newline at end of file diff --git a/src/main/java/com/github/nilstrieb/hunterlang/lexer/Lexer.java b/src/main/java/com/github/nilstrieb/hunterlang/lexer/Lexer.java index b58a87f..375ae19 100644 --- a/src/main/java/com/github/nilstrieb/hunterlang/lexer/Lexer.java +++ b/src/main/java/com/github/nilstrieb/hunterlang/lexer/Lexer.java @@ -166,8 +166,11 @@ public class Lexer { Leorio does say "small killua" } """; + String hierarchy = """ + killua0 hunts 3 > 3 + """; - ArrayList tokens = l.lex(ifs); + ArrayList tokens = l.lex(hierarchy); Parser p = new Parser(); try { diff --git a/src/main/java/com/github/nilstrieb/hunterlang/lexer/WordType.java b/src/main/java/com/github/nilstrieb/hunterlang/lexer/WordType.java index c26609f..8584f56 100644 --- a/src/main/java/com/github/nilstrieb/hunterlang/lexer/WordType.java +++ b/src/main/java/com/github/nilstrieb/hunterlang/lexer/WordType.java @@ -27,13 +27,13 @@ public enum WordType { private int postArgAmount; private int preArgAmount; - WordType(int postArgAmount, int preArgAmount) { + WordType(int preArgAmount, int postArgAmount) { this.postArgAmount = postArgAmount; this.preArgAmount = preArgAmount; } WordType(int postArgAmount) { - this(postArgAmount, 0); + this(0, postArgAmount); } WordType() { diff --git a/src/main/java/com/github/nilstrieb/hunterlang/parser/Parser.java b/src/main/java/com/github/nilstrieb/hunterlang/parser/Parser.java index 2a10b29..0111665 100644 --- a/src/main/java/com/github/nilstrieb/hunterlang/parser/Parser.java +++ b/src/main/java/com/github/nilstrieb/hunterlang/parser/Parser.java @@ -45,7 +45,7 @@ public class Parser { } //calculate the arguments of the start node, parsing the whole statement - getArguments(startNode, true); + doStatement(startNode, true); System.out.println(prevNode); statements.add(prevNode); } while (iterator.hasNext()); @@ -54,7 +54,7 @@ public class Parser { return statements; } - private void getArguments(ParseTreeNode node, boolean isParent) throws ParseException { + private void doStatement(ParseTreeNode node, boolean isParent) throws ParseException { if (node.getKey() == WordType.MINUS && prevNode.getKey() != WordType.NUMBER) { node.setKey(WordType.NEGATIVE); } @@ -77,19 +77,17 @@ public class Parser { if (isParent) { prevNode = node; } - if (expectedArg == 0) { - nextToken(); - } else { - nextToken(); + nextToken(); + if (expectedArg != 0) { for (int i = 0; i < expectedArg; i++) { ParseTreeNode child = currentToken.toNode(); - getArguments(child, false); + doStatement(child, false); node.addChild(child); } } if (currentToken != null && currentToken.expectsPreArg()) { - getArguments(currentToken.toNode(), true); + doStatement(currentToken.toNode(), true); } }