Initial Node & update 'multiple' system
This commit is contained in:
parent
4564f52c4c
commit
25563254b3
4 changed files with 111 additions and 63 deletions
|
@ -14,10 +14,11 @@ import be.jeffcheasey88.peeratcode.parser.Token;
|
||||||
import be.jeffcheasey88.peeratcode.parser.TokenType;
|
import be.jeffcheasey88.peeratcode.parser.TokenType;
|
||||||
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
|
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
|
||||||
import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree;
|
import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree;
|
||||||
|
import be.jeffcheasey88.peeratcode.parser.state.InitialStateTree;
|
||||||
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
|
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
|
||||||
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
|
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
|
||||||
|
|
||||||
public class JavaParser extends Parser<JavaFile> {
|
public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
public static long time;
|
public static long time;
|
||||||
|
|
||||||
|
@ -31,8 +32,8 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
|
|
||||||
time = System.currentTimeMillis();
|
time = System.currentTimeMillis();
|
||||||
|
|
||||||
Parser<JavaFile> parser = new JavaParser();
|
Parser<JavaElement> parser = new JavaParser();
|
||||||
JavaFile jFile = new JavaFile();
|
JavaElement jFile = new JavaElement();
|
||||||
parser.parse(reader, jFile);
|
parser.parse(reader, jFile);
|
||||||
|
|
||||||
System.out.println((System.currentTimeMillis()-time)+"ms");
|
System.out.println((System.currentTimeMillis()-time)+"ms");
|
||||||
|
@ -54,7 +55,7 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
//- Package
|
//- Package
|
||||||
|
|
||||||
//MODIFIER
|
//MODIFIER
|
||||||
StateTree<JavaFile> modifier = new StateTree<JavaFile>();
|
StateTree<JavaElement> modifier = new StateTree<JavaElement>();
|
||||||
modifier.then((validator) -> {
|
modifier.then((validator) -> {
|
||||||
boolean mod = false;
|
boolean mod = false;
|
||||||
while(validator.validate(
|
while(validator.validate(
|
||||||
|
@ -68,22 +69,22 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
}).end((a,b) -> a);
|
}).end((a,b) -> a);
|
||||||
|
|
||||||
//TYPE
|
//TYPE
|
||||||
StateTree<JavaFile> type = new StateTree<JavaFile>();
|
StateTree<JavaElement> type = new StateTree<JavaElement>();
|
||||||
StateTree<JavaFile> type_ = type.then((validator) ->
|
StateTree<JavaElement> type_ = type.then((validator) ->
|
||||||
validator.validate(
|
validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> bag.set(token)));
|
(bag, token) -> bag.set(token)));
|
||||||
StateTree<JavaFile> type_generic_begin = type_.then((validator) -> validator.validate(
|
StateTree<JavaElement> type_generic_begin = type_.then((validator) -> validator.validate(
|
||||||
(token) -> token.getValue().equals("<"),
|
(token) -> token.getValue().equals("<"),
|
||||||
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
||||||
StateTree<JavaFile> type_generic_name = type_generic_begin.then((validator) ->
|
StateTree<JavaElement> type_generic_name = type_generic_begin.then((validator) ->
|
||||||
validator.validate(
|
validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> bag.set(token)));
|
(bag, token) -> bag.set(token)));
|
||||||
StateTree<JavaFile> type_generic_split = type_generic_name.then((validator) -> validator.validate(
|
StateTree<JavaElement> type_generic_split = type_generic_name.then((validator) -> validator.validate(
|
||||||
(token) -> token.getValue().equals(","),
|
(token) -> token.getValue().equals(","),
|
||||||
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
||||||
StateTree<JavaFile> type_generic_end = type_generic_name.then((validator) -> validator.validate(
|
StateTree<JavaElement> type_generic_end = type_generic_name.then((validator) -> validator.validate(
|
||||||
(token) -> token.getValue().equals(">"),
|
(token) -> token.getValue().equals(">"),
|
||||||
(bag, token) -> bag.set(bag.<Token>get().concat(token)))).loop();
|
(bag, token) -> bag.set(bag.<Token>get().concat(token)))).loop();
|
||||||
|
|
||||||
|
@ -95,8 +96,8 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
type_generic_end.end((a,b) -> a);
|
type_generic_end.end((a,b) -> a);
|
||||||
|
|
||||||
//VALUE
|
//VALUE
|
||||||
StateTree<JavaFile> value = new StateTree<>();
|
StateTree<JavaElement> value = new StateTree<>();
|
||||||
StateTree<JavaFile> value_name = value.then((validator) -> validator.validate(
|
StateTree<JavaElement> value_name = value.then((validator) -> validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> {
|
(bag, token) -> {
|
||||||
Token current = bag.get();
|
Token current = bag.get();
|
||||||
|
@ -105,13 +106,13 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
bag.set(current);
|
bag.set(current);
|
||||||
}));
|
}));
|
||||||
value_name.end((a,b) -> a);
|
value_name.end((a,b) -> a);
|
||||||
StateTree<JavaFile> value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(".")));
|
StateTree<JavaElement> value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(".")));
|
||||||
value_call.then(value_name);
|
value_call.then(value_name);
|
||||||
StateTree<JavaFile> value_arg_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
StateTree<JavaElement> value_arg_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
StateTree<JavaFile> value_arg_end = value_arg_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
StateTree<JavaElement> value_arg_end = value_arg_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
value_arg_end.end((a,b) -> a);
|
value_arg_end.end((a,b) -> a);
|
||||||
value_arg_end.then(value_call);
|
value_arg_end.then(value_call);
|
||||||
StateTree<JavaFile> value_arg = value_arg_begin.then(new RedirectStateTree<>(value, (global, local) -> {
|
StateTree<JavaElement> value_arg = value_arg_begin.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
Integer count = global.get("args");
|
Integer count = global.get("args");
|
||||||
if(count == null) count = 0;
|
if(count == null) count = 0;
|
||||||
global.set("arg"+count, local);
|
global.set("arg"+count, local);
|
||||||
|
@ -148,61 +149,64 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
}).end((a,b) -> a);
|
}).end((a,b) -> a);
|
||||||
|
|
||||||
//VARIABLE
|
//VARIABLE
|
||||||
StateTree<JavaFile> variable = new StateTree<>();
|
StateTree<JavaElement> variable = new StateTree<>();
|
||||||
StateTree<JavaFile> variable_mod = variable.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
StateTree<JavaElement> variable_mod = variable.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
||||||
StateTree<JavaFile> variable_type = variable.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
StateTree<JavaElement> variable_type = variable.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
||||||
variable_mod.then(variable_type);
|
variable_mod.then(variable_type);
|
||||||
StateTree<JavaFile> variable_name = variable_type.then((validator) -> validator.validate(
|
StateTree<JavaElement> variable_name = variable_type.then((validator) -> validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> bag.set(token)));
|
(bag, token) -> bag.set(token)));
|
||||||
variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end((a,b) -> new Variable(b));
|
.end((a,b) -> new Variable(b));
|
||||||
StateTree<JavaFile> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
StateTree<JavaElement> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
||||||
variable_split.then(variable_name);
|
variable_split.then(variable_name);
|
||||||
StateTree<JavaFile> variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
StateTree<JavaElement> variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
.then(new RedirectStateTree<>(value, (global, local) -> global.set("value", local)));
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set("value", local)));
|
||||||
variable_value.then(variable_split);
|
variable_value.then(variable_split);
|
||||||
variable_value.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
variable_value.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
|
StateTree<JavaElement> function_container = new StateTree<>();
|
||||||
|
|
||||||
//FUNCTION
|
//FUNCTION
|
||||||
StateTree<JavaFile> function = new StateTree<>();
|
StateTree<JavaElement> function = new StateTree<>();
|
||||||
StateTree<JavaFile> function_mod = function.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
StateTree<JavaElement> function_mod = function.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
||||||
StateTree<JavaFile> function_type = function.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
StateTree<JavaElement> function_type = function.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
||||||
function_mod.then(function_type);
|
function_mod.then(function_type);
|
||||||
function.then((validator) -> validator.validate((token) -> token.getValue().equals("static"))).end((a,b) -> a);
|
function.then((validator) -> validator.validate((token) -> token.getValue().equals("static")) && validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
||||||
StateTree<JavaFile> function_name = function_type.then((validator) -> validator.validate(
|
StateTree<JavaElement> function_name = function_type.then((validator) -> validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> bag.set(token)));
|
(bag, token) -> bag.set(token)));
|
||||||
StateTree<JavaFile> function_begin = function_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
StateTree<JavaElement> function_begin = function_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
StateTree<JavaFile> function_end = function_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
StateTree<JavaElement> function_end = function_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
function_end.end((a,b) -> a);
|
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
||||||
|
|
||||||
StateTree<JavaFile> function_throws = function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("throws")))
|
StateTree<JavaElement> function_throws = function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("throws")))
|
||||||
.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
||||||
function_throws.end((a,b) -> a);
|
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
||||||
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_throws);
|
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_throws);
|
||||||
|
|
||||||
|
|
||||||
StateTree<JavaFile> function_arg_type = function_begin.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
StateTree<JavaElement> function_arg_type = function_begin.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
||||||
StateTree<JavaFile> function_arg_name = function_arg_type.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
StateTree<JavaElement> function_arg_name = function_arg_type.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
||||||
function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_arg_type);
|
function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_arg_type);
|
||||||
function_arg_name.then(function_end);
|
function_arg_name.then(function_end);
|
||||||
|
|
||||||
StateTree<JavaFile> clazz_container = new StateTree<>();
|
|
||||||
|
StateTree<JavaElement> clazz_container = new StateTree<>();
|
||||||
clazz_container.then(variable);
|
clazz_container.then(variable);
|
||||||
clazz_container.then(function);
|
clazz_container.then(function);
|
||||||
|
|
||||||
//CLASS
|
//CLASS
|
||||||
StateTree<JavaFile> clazz_ = new StateTree<>();
|
StateTree<JavaElement> clazz_ = new StateTree<>();
|
||||||
StateTree<JavaFile> clazz = new StateTree<>();
|
StateTree<JavaElement> clazz = new StateTree<>();
|
||||||
|
|
||||||
StateTree<JavaFile> clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class")))
|
StateTree<JavaElement> clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class")))
|
||||||
.then(new RedirectStateTree<>(type, (global, local) -> global.set("name", local.get())));
|
.then(new RedirectStateTree<>(type, (global, local) -> global.set("name", local.get())));
|
||||||
clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((javafile, bag) -> new Class(bag)).multiple(clazz_container);
|
.<JavaElement>end((JavaElement, bag) -> new Class(bag)).multiple(clazz_container);
|
||||||
StateTree<JavaFile> clazz_implement = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("implements")));
|
StateTree<JavaElement> clazz_implement = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("implements")));
|
||||||
StateTree<JavaFile> clazz_implement_name = clazz_implement.then(new RedirectStateTree<>(type, (global, local) -> {
|
StateTree<JavaElement> clazz_implement_name = clazz_implement.then(new RedirectStateTree<>(type, (global, local) -> {
|
||||||
Token token = global.get("implement");
|
Token token = global.get("implement");
|
||||||
if(token == null) token = local.get();
|
if(token == null) token = local.get();
|
||||||
else token = token.concat(local.get());
|
else token = token.concat(local.get());
|
||||||
|
@ -210,19 +214,19 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
}));
|
}));
|
||||||
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(clazz_implement_name);
|
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(clazz_implement_name);
|
||||||
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((javafile, bag) -> new Class(bag)).multiple(clazz_container);
|
.<JavaElement>end((JavaElement, bag) -> new Class(bag)).multiple(clazz_container);
|
||||||
StateTree<JavaFile> clazz_extend = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("extends")))
|
StateTree<JavaElement> clazz_extend = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("extends")))
|
||||||
.then(new RedirectStateTree<>(type, (global, local) -> global.set("extend", local)));
|
.then(new RedirectStateTree<>(type, (global, local) -> global.set("extend", local)));
|
||||||
clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((javafile, bag) -> new Class(bag)).multiple(clazz_container);
|
.<JavaElement>end((JavaElement, bag) -> new Class(bag)).multiple(clazz_container);
|
||||||
clazz_extend.then(clazz_implement);
|
clazz_extend.then(clazz_implement);
|
||||||
|
|
||||||
|
|
||||||
StateTree<JavaFile> clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
StateTree<JavaElement> clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
||||||
clazz_mod.then(clazz);
|
clazz_mod.then(clazz);
|
||||||
|
|
||||||
//IMPORT
|
//IMPORT
|
||||||
StateTree<JavaFile> importState = new StateTree<>();
|
StateTree<JavaElement> importState = new StateTree<>();
|
||||||
importState.then((validator) -> {
|
importState.then((validator) -> {
|
||||||
if(validator.validate(
|
if(validator.validate(
|
||||||
(token) -> token.getValue().equals("import"),
|
(token) -> token.getValue().equals("import"),
|
||||||
|
@ -240,13 +244,13 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
return validator.validate((token) -> token.getValue().equals(";"));
|
return validator.validate((token) -> token.getValue().equals(";"));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}).<JavaElement>end((javafile, bag) -> javafile.addImport(bag));
|
}).<JavaElement>end((javafile, bag) -> javafile);
|
||||||
|
|
||||||
|
|
||||||
StateTree<JavaFile> main = new StateTree<>();
|
InitialStateTree<JavaElement> main = new InitialStateTree<>();
|
||||||
|
|
||||||
//PACKAGE
|
//PACKAGE
|
||||||
BuilderStateTree<JavaFile, JavaElement> pack = main.then((validator) -> {
|
StateTree<JavaElement> pack = main.then((validator) -> {
|
||||||
if(validator.validate(
|
if(validator.validate(
|
||||||
(token) -> token.getValue().equals("package"),
|
(token) -> token.getValue().equals("package"),
|
||||||
(bag, token) -> bag.set(new LinkedList<>()))){
|
(bag, token) -> bag.set(new LinkedList<>()))){
|
||||||
|
@ -255,13 +259,13 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
(token) -> !token.getValue().equals(";"),
|
(token) -> !token.getValue().equals(";"),
|
||||||
(bag, token) -> bag.<List<Token>>get().add(token))
|
(bag, token) -> bag.<List<Token>>get().add(token))
|
||||||
);
|
);
|
||||||
|
|
||||||
return validator.validate((token) -> token.getValue().equals(";"));
|
return validator.validate((token) -> token.getValue().equals(";"));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}).<JavaElement>end((javafile, bag) -> javafile.setPackage(bag));
|
}).end((javafile, bag) -> javafile);
|
||||||
pack.multiple(importState);
|
main.multiple(pack);
|
||||||
pack.multiple(clazz_);
|
main.multiple(importState);
|
||||||
|
main.multiple(clazz_);
|
||||||
|
|
||||||
|
|
||||||
System.out.println((System.currentTimeMillis()-time)+"ms");
|
System.out.println((System.currentTimeMillis()-time)+"ms");
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
private BiFunction<E, Bag, B> builder;
|
private BiFunction<E, Bag, B> builder;
|
||||||
|
|
||||||
private List<StateTree<E>> childs;
|
private List<StateTree<E>> childs;
|
||||||
private List<StateTree<E>> multiple;
|
private List<StateTree<B>> multiple;
|
||||||
|
|
||||||
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
||||||
super();
|
super();
|
||||||
|
@ -30,24 +30,23 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
BuilderStateTree<B, ?> builded = super.internalSeed(validator, build);
|
BuilderStateTree<B, ?> builded = super.internalSeed(validator, build);
|
||||||
if(builded != null) builded.build(validator, build);
|
if(builded != null) builded.build(validator, build);
|
||||||
|
|
||||||
BuilderStateTree<E, ?> sub_builded;
|
for(StateTree<B> state : this.multiple){
|
||||||
|
|
||||||
for(StateTree<E> state : this.multiple){
|
|
||||||
TokenValidator branch = validator.branch();
|
TokenValidator branch = validator.branch();
|
||||||
if(state.checker == null){
|
if(state.checker == null){
|
||||||
while((sub_builded = state.internalSeed(branch, element)) != null){
|
while((builded = state.internalSeed(branch, build)) != null){
|
||||||
validator.merge(branch);
|
validator.merge(branch);
|
||||||
sub_builded.build(validator, element);
|
builded.build(validator, build);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
while(state.checker.apply(branch)){
|
while(state.checker.apply(branch)){
|
||||||
sub_builded = state.internalSeed(branch, element);
|
builded = state.internalSeed(branch, build);
|
||||||
if(sub_builded == null) break;
|
if(builded == null) break;
|
||||||
validator.merge(branch);
|
validator.merge(branch);
|
||||||
sub_builded.build(validator, element);
|
builded.build(validator, build);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BuilderStateTree<E, ?> sub_builded;
|
||||||
for(StateTree<E> child : this.childs){
|
for(StateTree<E> child : this.childs){
|
||||||
TokenValidator branch = validator.branch();
|
TokenValidator branch = validator.branch();
|
||||||
if(child.checker == null){
|
if(child.checker == null){
|
||||||
|
@ -81,7 +80,7 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends StateTree<E>> StateTree<E> multiple(StateTree<E> child){
|
public <T extends StateTree<B>> StateTree<B> multiple(StateTree<B> child){
|
||||||
this.multiple.add(child);
|
this.multiple.add(child);
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package be.jeffcheasey88.peeratcode.parser.state;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import be.jeffcheasey88.peeratcode.parser.TokenValidator;
|
||||||
|
|
||||||
|
public class InitialStateTree<E> extends StateTree<E>{
|
||||||
|
|
||||||
|
private List<StateTree<E>> multiple;
|
||||||
|
|
||||||
|
public InitialStateTree(){
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.multiple = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
|
||||||
|
BuilderStateTree<E, ?> builded;
|
||||||
|
for(StateTree<E> state : this.multiple){
|
||||||
|
TokenValidator branch = validator.branch();
|
||||||
|
if(state.checker == null){
|
||||||
|
while((builded = state.internalSeed(branch, element)) != null){
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, element);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
while(state.checker.apply(branch)){
|
||||||
|
builded = state.internalSeed(branch, element);
|
||||||
|
if(builded == null) break;
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.internalSeed(validator, element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends StateTree<E>> StateTree<E> multiple(StateTree<E> child){
|
||||||
|
this.multiple.add(child);
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ class GlobalCover {
|
||||||
parser.parse(new BufferedReader(new FileReader(file)), new JavaFile());
|
parser.parse(new BufferedReader(new FileReader(file)), new JavaFile());
|
||||||
validated += TokenValidator.MAX_VALIDATE;
|
validated += TokenValidator.MAX_VALIDATE;
|
||||||
tokens += TokenValidator.TOKENS;
|
tokens += TokenValidator.TOKENS;
|
||||||
|
System.out.println(file+" "+validated+" / "+tokens);
|
||||||
TokenValidator.MAX_VALIDATE = 0;
|
TokenValidator.MAX_VALIDATE = 0;
|
||||||
TokenValidator.TOKENS = 0;
|
TokenValidator.TOKENS = 0;
|
||||||
count++;
|
count++;
|
||||||
|
|
Loading…
Add table
Reference in a new issue