From eef3e16527921b4fb388921ab59b22d33ef6d5e6 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Mon, 10 Jul 2023 11:00:20 +0200 Subject: [PATCH] [Parse Class] -> Function signature --- .../peeratcode/parser/java/Class.java | 5 + .../peeratcode/parser/java/Function.java | 1 + .../peeratcode/parser/java/JavaParser.java | 222 +++++++++++++----- 3 files changed, 164 insertions(+), 64 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java index 74ec4a1..efbf95b 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java @@ -29,6 +29,11 @@ public class Class extends JavaElement{ this.elements = new ArrayList<>(); } + @Override + public String toString(){ + return "class "+name+" extends "+extend+" implements "+implement; + } + } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Function.java b/src/be/jeffcheasey88/peeratcode/parser/java/Function.java index 361e932..35590bf 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Function.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Function.java @@ -16,6 +16,7 @@ public class Function extends JavaElement{ private List elements; public Function(Bag bag){ + System.out.println(bag); this.returnType = bag.get("return").get().getValue(); if(JavaParser.getModifier(this.returnType) > 0) this.returnType = null; this.name = bag.get("name").getValue(); diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 40edc63..58966ef 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -45,7 +45,6 @@ public class JavaParser extends Parser { if(base == null) bag.set(token); else bag.set(base.concat(token)); }), -// LAMBDA_name = (v) -> v.validate((t) -> {if(t.getType().equals(TokenType.NAME) && JavaParser.getModifier(t.getValue()) == 0) { System.out.println("valid type name --> "+t.getValue()); return true;}else return false;}), LAMBDA_mod = (v) -> v.validate((t) -> JavaParser.getModifier(t.getValue()) > 0, (bag, token) -> { @@ -68,7 +67,7 @@ public class JavaParser extends Parser { System.out.println("new var"); return new Variable(validator.getBag()); }); - BiFunction + BiFunction END_FUNC = ((javafile, validator) -> { System.out.println("new function"); return new be.jeffcheasey88.peeratcode.parser.java.Function(validator.getBag()); @@ -77,6 +76,10 @@ public class JavaParser extends Parser { END_MODIFIER = ((javafile, validator) ->{ return validator.getBag().get(); }); + BiFunction + END_OP = ((javafile, validator) -> { + return javafile; + }); public JavaParser(){ Tokenizer tokenizer = new Tokenizer(); @@ -85,46 +88,15 @@ public class JavaParser extends Parser { Function LAMBDA_1 = (v) -> v.validate((t) -> t.getValue().equals(";")); Function LAMBDA_3 = (v) -> v.validate((t) -> t.getValue().equals("import")); Function LAMBDA_4 = (v) -> v.validate((t) -> t.getValue().equals("static"), (bag, token) -> bag.set("static", "bool")); - Function LAMBDA_5 = (v) -> v.validate((t) -> t.getValue().equals("<"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_6 = (v) -> v.validate((t) -> t.getValue().equals(">"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_5 = (v) -> v.validate((t) -> t.getValue().equals("<")); + Function LAMBDA_6 = (v) -> v.validate((t) -> t.getValue().equals(">")); Function LAMBDA_7 = (v) -> v.validate((t) -> t.getValue().equals(",")); - Function LAMBDA_8 = (v) -> v.validate((t) -> t.getValue().equals("="), (bag, t) -> bag.set("type", t)); - Function LAMBDA_10 = (v) -> v.validate((t) -> t.getValue().equals("!"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_11 = (v) -> v.validate((t) -> t.getValue().equals("?"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_12 = (v) -> v.validate((t) -> t.getValue().equals(":"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_13 = (v) -> v.validate((t) -> t.getValue().equals("~"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_14 = (v) -> v.validate((t) -> t.getValue().equals("+"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_15 = (v) -> v.validate((t) -> t.getValue().equals("-"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_16 = (v) -> v.validate((t) -> t.getValue().equals("/"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_17 = (v) -> v.validate((t) -> t.getValue().equals("*"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_18 = (v) -> v.validate((t) -> t.getValue().equals("&"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_19 = (v) -> v.validate((t) -> t.getValue().equals("|"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_20 = (v) -> v.validate((t) -> t.getValue().equals("^"), (bag, t) -> bag.set("type", t)); - Function LAMBDA_21 = (v) -> v.validate((t) -> t.getValue().equals("%"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_8 = (v) -> v.validate((t) -> t.getValue().equals("=")); Function LAMBDA_23 = (v) -> v.validate((t) -> t.getValue().equals("(")); Function LAMBDA_24 = (v) -> v.validate((t) -> t.getValue().equals(")")); - Function LAMBDA_25 = (v) -> v.validate((t) -> t.getValue().equals("."), (bag, t) -> bag.set("type", t)); - Function LAMBDA_26 = (v) -> v.validate((t) -> t.getValue().equals("\""), (bag, t) -> { - Bag sub = bag.get("?"); - if(sub == null) return; - sub.set(new Value(sub.get())); - }); - Function LAMBDA_27 = (v) -> v.validate((t) -> !t.getValue().equals("\""), (bag,t) -> { - Bag sub = bag.get("?"); - if(sub == null){ - sub = new Bag(); - bag.set("?", sub); - sub.set(t); - return; - } - sub.set(sub.get().concat(t)); - }); + Function LAMBDA_25 = (v) -> v.validate((t) -> t.getValue().equals(".")); Function LAMBDA_28 = (v) -> v.validate((t) -> t.getValue().equals("'")); - Function LAMBDA_29 = (v) -> v.validate((t) -> t.getValue().length() == 1, (bag, t) -> { - Bag sub = new Bag(); - sub.set(new Value(t)); - bag.set("?", sub); - }); + Function LAMBDA_29 = (v) -> v.validate((t) -> t.getValue().equals("oneChar")); Function LAMBDA_30 = (v) -> v.validate((t) -> t.getValue().equals("if")); Function LAMBDA_31 = (v) -> v.validate((t) -> t.getValue().equals("for")); Function LAMBDA_32 = (v) -> v.validate((t) -> t.getValue().equals("while")); @@ -143,7 +115,112 @@ public class JavaParser extends Parser { Function LAMBDA_48 = (v) -> v.validate((t) -> t.getValue().equals("extends")); StateTree main = new StateTree<>(); - StateTree value_q0 = value(LAMBDA_5, LAMBDA_6, LAMBDA_7, LAMBDA_8, LAMBDA_10, LAMBDA_11, LAMBDA_12, LAMBDA_13, LAMBDA_14, LAMBDA_15, LAMBDA_16, LAMBDA_17, LAMBDA_18, LAMBDA_19, LAMBDA_20, LAMBDA_21, LAMBDA_23, LAMBDA_24, LAMBDA_25, LAMBDA_26, LAMBDA_27, LAMBDA_28, LAMBDA_29); + StateTree package_q0 = new StateTree<>(); + package_q0.then(LAMBDA_0).then((v) -> v.validate((t) -> !t.getValue().equals(";"), groupToken("package"))).loop().then(LAMBDA_1).end(END_PACKAGE); + + StateTree import_q0 = new StateTree<>(); + StateTree import_q1 = import_q0.then(LAMBDA_3); + StateTree import_q3 = import_q1.then((v) -> v.validate((t) -> !t.getValue().equals(";"), groupToken("import"))).loop(); + import_q3.then(LAMBDA_1).end(END_IMPORT); + StateTree import_q2 = import_q1.then(LAMBDA_4); + import_q2.then(import_q3); + + StateTree modifier_q0 = new StateTree<>(); + modifier_q0.then(LAMBDA_mod).end(END_MODIFIER); + + StateTree type_q0 = new StateTree<>(); + StateTree type_q1 = type_q0.then(LAMBDA_name); + StateTree type_q3 = type_q1.then(LAMBDA_5); + StateTree type_q4 = type_q3.then(LAMBDA_name); + StateTree type_q5 = type_q4.then(LAMBDA_6).loop(); + type_q5.end(END_TYPE); + StateTree type_q6 = type_q4.then(LAMBDA_7); + type_q5.then(type_q6); + type_q5.then(type_q4); + type_q6.then(type_q4); + type_q4.then(type_q3); + type_q1.end(END_TYPE); + + StateTree value_q0 = value(); + + StateTree variable_q0 = new StateTree<>(); + StateTree variable_q1 = variable_q0.then(new RedirectStateTree<>(type_q0,(bag) -> "type=token")); + StateTree variable_q2 = variable_q1.then(LAMBDA_name); + StateTree variable_q5 = variable_q2.then(LAMBDA_7); + StateTree variable_q7 = variable_q2.then(LAMBDA_8).then(new RedirectStateTree<>(value_q0,(bag) -> "?")); + variable_q7.then(variable_q5); + variable_q7.then(LAMBDA_1).end(END_VAR); + variable_q2.then(LAMBDA_1).end(END_VAR); + variable_q5.then(variable_q2); + StateTree variable_q10 = variable_q0.then(new RedirectStateTree<>(modifier_q0,(bag) -> "modifier")); + variable_q10.then(variable_q1); + + StateTree operation_q0 = new StateTree<>(); + StateTree operation_q1 = operation_q0.then(LAMBDA_name); + operation_q1.then(new RedirectStateTree<>(value_q0,(bag) -> "?")).end(END_OP); + StateTree operation_q5 = operation_q1.then(LAMBDA_25); + operation_q5.then(operation_q1); + operation_q0.then(LAMBDA_30).then(LAMBDA_23).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_24).end(END_OP); + operation_q0.then(LAMBDA_31).then(LAMBDA_23).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_24).end(END_OP); + operation_q0.then(LAMBDA_32).then(LAMBDA_23).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_24).end(END_OP); + operation_q0.then(LAMBDA_33).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_1).end(END_OP); + operation_q0.then(LAMBDA_34).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).end(END_OP); + operation_q0.then(LAMBDA_35).then(LAMBDA_23).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_24).end(END_OP); + operation_q0.then(LAMBDA_36).then(LAMBDA_1).end(END_OP); + operation_q0.then(LAMBDA_37).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_1).end(END_OP); + operation_q0.then(LAMBDA_38).then(LAMBDA_1).end(END_OP); + operation_q0.then(LAMBDA_39).end(END_OP); + + StateTree function_q17 = new StateTree<>(); + StateTree function_q18 = function_q17.then(LAMBDA_40); + function_q18.then(LAMBDA_41).end(END_FUNC); + StateTree function_q22 = function_q18.then(new RedirectStateTree<>(operation_q0,(bag) -> "?")); + function_q22.then(function_q18); + StateTree function_q21 = function_q18.then(new RedirectStateTree<>(variable_q0,(bag) -> "?")); + function_q21.then(function_q18); + StateTree function_q0 = new StateTree<>(); + StateTree function_q1 = function_q0.then(new RedirectStateTree<>(type_q0,(bag) -> "return")); + function_q1.then(LAMBDA_40).end(END_FUNC).then(function_q17); + StateTree function_q3 = function_q1.then((v) -> v.validate( + (t) -> t.getType().equals(TokenType.NAME), + (bag, t) -> bag.set("name", t))).then(LAMBDA_23); + StateTree function_q4 = function_q3.then(LAMBDA_24); + StateTree function_q10 = function_q4.then(LAMBDA_44).then(new RedirectStateTree<>(type_q0,(bag) -> "?")); + function_q10.end(END_FUNC).then(function_q17); + StateTree function_q11 = function_q10.then(LAMBDA_7); + function_q11.then(function_q10); + function_q4.end(END_FUNC).then(function_q17); + StateTree function_q7 = function_q3.then(new RedirectStateTree<>(type_q0,(bag) -> "?")).then(LAMBDA_name); + function_q7.then(function_q4); + StateTree function_q6 = function_q3.then(new RedirectStateTree<>(type_q0,(bag) -> "?")); + StateTree function_q8 = function_q7.then(LAMBDA_7); + function_q8.then(function_q6); + StateTree function_q15 = function_q0.then(new RedirectStateTree<>(modifier_q0,(bag) -> "modifier")); + function_q15.then(function_q1); + + StateTree class_q16 = new StateTree<>(); + StateTree class_q18 = class_q16.then(new RedirectStateTree<>(variable_q0,(bag) -> "?")); + class_q18.then(class_q16); + StateTree class_q19 = class_q16.then(new RedirectStateTree<>(function_q0,(bag) -> "?")); + class_q19.then(class_q16); + StateTree class_q0 = new StateTree<>(); + StateTree class_q1 = class_q0.then(LAMBDA_46); + StateTree class_q2 = class_q1.then(new RedirectStateTree<>(type_q0,(bag) -> "name")); + StateTree class_q9 = class_q2.then(LAMBDA_47); + StateTree class_q11 = class_q9.then(new RedirectStateTree<>(type_q0,(bag) -> "implement")); + class_q11.then(LAMBDA_40).end(END_CLASS).then(class_q16); + StateTree class_q12 = class_q11.then(LAMBDA_7); + class_q12.then(class_q11); + StateTree class_q7 = class_q2.then(LAMBDA_48).then(new RedirectStateTree<>(type_q0,(bag) -> "extend")); + class_q7.then(class_q9); + class_q7.then(LAMBDA_40).end(END_CLASS).then(class_q16); + class_q2.then(LAMBDA_40).end(END_CLASS).then(class_q16); + StateTree class_q3 = class_q0.then(new RedirectStateTree<>(modifier_q0,(bag) -> "modifier")); + class_q3.then(class_q1); + + main.then(new RedirectStateTree<>(package_q0, (b) -> null)).then(main); + main.then(new RedirectStateTree<>(import_q0, (b) -> null)).then(main); + main.then(new RedirectStateTree<>(class_q0, (b) -> null)).then(main); System.out.println((System.currentTimeMillis()-time)+"ms"); @@ -189,31 +266,48 @@ public class JavaParser extends Parser { return 0; } - private StateTree value( - Function LAMBDA_5, - Function LAMBDA_6, - Function LAMBDA_7, - Function LAMBDA_8, - Function LAMBDA_10, - Function LAMBDA_11, - Function LAMBDA_12, - Function LAMBDA_13, - Function LAMBDA_14, - Function LAMBDA_15, - Function LAMBDA_16, - Function LAMBDA_17, - Function LAMBDA_18, - Function LAMBDA_19, - Function LAMBDA_20, - Function LAMBDA_21, - Function LAMBDA_23, - Function LAMBDA_24, - Function LAMBDA_25, - Function LAMBDA_26, - Function LAMBDA_27, - Function LAMBDA_28, - Function LAMBDA_29 - ){ + private StateTree value(){ + Function LAMBDA_5 = (v) -> v.validate((t) -> t.getValue().equals("<"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_6 = (v) -> v.validate((t) -> t.getValue().equals(">"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_7 = (v) -> v.validate((t) -> t.getValue().equals(",")); + Function LAMBDA_8 = (v) -> v.validate((t) -> t.getValue().equals("="), (bag, t) -> bag.set("type", t)); + Function LAMBDA_10 = (v) -> v.validate((t) -> t.getValue().equals("!"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_11 = (v) -> v.validate((t) -> t.getValue().equals("?"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_12 = (v) -> v.validate((t) -> t.getValue().equals(":"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_13 = (v) -> v.validate((t) -> t.getValue().equals("~"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_14 = (v) -> v.validate((t) -> t.getValue().equals("+"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_15 = (v) -> v.validate((t) -> t.getValue().equals("-"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_16 = (v) -> v.validate((t) -> t.getValue().equals("/"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_17 = (v) -> v.validate((t) -> t.getValue().equals("*"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_18 = (v) -> v.validate((t) -> t.getValue().equals("&"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_19 = (v) -> v.validate((t) -> t.getValue().equals("|"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_20 = (v) -> v.validate((t) -> t.getValue().equals("^"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_21 = (v) -> v.validate((t) -> t.getValue().equals("%"), (bag, t) -> bag.set("type", t)); + Function LAMBDA_23 = (v) -> v.validate((t) -> t.getValue().equals("(")); + Function LAMBDA_24 = (v) -> v.validate((t) -> t.getValue().equals(")")); + Function LAMBDA_25 = (v) -> v.validate((t) -> t.getValue().equals("."), (bag, t) -> bag.set("type", t)); + Function LAMBDA_26 = (v) -> v.validate((t) -> t.getValue().equals("\""), (bag, t) -> { + Bag sub = bag.get("?"); + if(sub == null) return; + sub.set(new Value(sub.get())); + }); + Function LAMBDA_27 = (v) -> v.validate((t) -> !t.getValue().equals("\""), (bag,t) -> { + Bag sub = bag.get("?"); + if(sub == null){ + sub = new Bag(); + bag.set("?", sub); + sub.set(t); + return; + } + sub.set(sub.get().concat(t)); + }); + Function LAMBDA_28 = (v) -> v.validate((t) -> t.getValue().equals("'")); + Function LAMBDA_29 = (v) -> v.validate((t) -> t.getValue().length() == 1, (bag, t) -> { + Bag sub = new Bag(); + sub.set(new Value(t)); + bag.set("?", sub); + }); + BiFunction END_NATIVE_VALUE = (element, validator) -> { Value result = validator.getBag().get("?").get(); if(result.get() != null){