Parser -> Variable

This commit is contained in:
jeffcheasey88 2023-07-19 13:37:14 +02:00
parent 8d0e9f0ee7
commit 16773beb88
2 changed files with 51 additions and 5 deletions

View file

@ -43,6 +43,16 @@ public class JavaParser extends Parser<JavaFile> {
public JavaParser(){ public JavaParser(){
Tokenizer tokenizer = new Tokenizer(); Tokenizer tokenizer = new Tokenizer();
//SUMMARY
//- Modifier
//- Type
//- Value
//- Variable
//- Class
//- Import
//- Package
//MODIFIER
StateTree<JavaFile> modifier = new StateTree<JavaFile>(); StateTree<JavaFile> modifier = new StateTree<JavaFile>();
modifier.then((validator) -> { modifier.then((validator) -> {
boolean mod = false; boolean mod = false;
@ -56,6 +66,7 @@ public class JavaParser extends Parser<JavaFile> {
return mod; return mod;
}).end((a,b) -> a); }).end((a,b) -> a);
//TYPE
StateTree<JavaFile> type = new StateTree<JavaFile>(); StateTree<JavaFile> type = new StateTree<JavaFile>();
StateTree<JavaFile> type_ = type.then((validator) -> StateTree<JavaFile> type_ = type.then((validator) ->
validator.validate( validator.validate(
@ -82,13 +93,34 @@ public class JavaParser extends Parser<JavaFile> {
type_generic_end.then(type_generic_split); type_generic_end.then(type_generic_split);
type_generic_end.end((a,b) -> a); type_generic_end.end((a,b) -> a);
//VALUE
//VARIABLE
StateTree<JavaFile> variable = new StateTree<>();
StateTree<JavaFile> variable_type = variable.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
variable.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)))
.then(variable_type);
StateTree<JavaFile> variable_name = variable_type.then((validator) -> validator.validate(
(token) -> token.getType().equals(TokenType.NAME),
(bag, token) -> bag.set(token)));
variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> new Variable(b));
StateTree<JavaFile> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
variable_split.then(variable_name);
variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")));
StateTree<JavaFile> clazz_container = new StateTree<>();
clazz_container.then(variable);
//CLASS
StateTree<JavaFile> clazz_ = new StateTree<>(); StateTree<JavaFile> clazz_ = new StateTree<>();
StateTree<JavaFile> clazz = new StateTree<>(); StateTree<JavaFile> clazz = new StateTree<>();
StateTree<JavaFile> clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class"))) StateTree<JavaFile> 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)); .end((javafile, bag) -> new Class(bag)).multiple(clazz_container);
StateTree<JavaFile> clazz_implement = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("implements"))); StateTree<JavaFile> 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<JavaFile> clazz_implement_name = clazz_implement.then(new RedirectStateTree<>(type, (global, local) -> {
Token token = global.get("implement"); Token token = global.get("implement");
@ -98,17 +130,18 @@ 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)); .end((javafile, bag) -> new Class(bag)).multiple(clazz_container);
StateTree<JavaFile> clazz_extend = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("extends"))) StateTree<JavaFile> 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)); .end((javafile, 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<JavaFile> clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
clazz_mod.then(clazz); clazz_mod.then(clazz);
//IMPORT
StateTree<JavaFile> importState = new StateTree<>(); StateTree<JavaFile> importState = new StateTree<>();
importState.then((validator) -> { importState.then((validator) -> {
if(validator.validate( if(validator.validate(
@ -132,6 +165,7 @@ public class JavaParser extends Parser<JavaFile> {
StateTree<JavaFile> main = new StateTree<>(); StateTree<JavaFile> main = new StateTree<>();
//PACKAGE
BuilderStateTree<JavaFile, JavaElement> pack = main.then((validator) -> { BuilderStateTree<JavaFile, JavaElement> pack = main.then((validator) -> {
if(validator.validate( if(validator.validate(
(token) -> token.getValue().equals("package"), (token) -> token.getValue().equals("package"),

View file

@ -1,6 +1,11 @@
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -32,8 +37,15 @@ class GlobalCover {
count++; count++;
} }
} }
System.out.println("Load time : "+((System.currentTimeMillis()-time)/1000.0)+"s");
System.out.printf("%.3f%% ("+validated+") validated in "+count+" files !\n", ((validated/tokens)*100.0)); time = ((System.currentTimeMillis()-time)/1000);
String data = "{\"hash\": "+System.currentTimeMillis()+",\"time\": "+time+",\"percentage\": "+String.format("%.3f", ((validated/tokens)*100.0)).replace(",", ".")+",\"validated\": "+validated+",\"files\": "+count+"}";
File file = new File("/home/tmp_.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(data+"\n");
writer.flush();
writer.close();
} }
private List<File> files(File dir){ private List<File> files(File dir){