Pause of synthaxe

This commit is contained in:
jeffcheasey88 2023-09-11 23:45:26 +02:00
parent efd96c26c3
commit e7eb6a0f53
7 changed files with 120 additions and 24 deletions

View file

@ -24,14 +24,18 @@ public class Parser<E>{
this.tokenizer.reset();
this.tokenizer.parse(reader);
this.state.seed(this.tokenizer, container);
this.state.seed(new TokenValidator(tokenizer.getTokens().toArray(new Token[0])), container);
}
public final void parse(String line, E container) throws Exception{
this.tokenizer.reset();
this.tokenizer.parse(line);
this.state.seed(this.tokenizer, container);
this.state.seed(new TokenValidator(tokenizer.getTokens().toArray(new Token[0])), container);
}
public final void parseStream(BufferedReader reader, E container) throws Exception{
}
//tmp

View file

@ -0,0 +1,65 @@
package be.jeffcheasey88.peeratcode.parser;
import java.io.BufferedReader;
import java.util.function.BiConsumer;
import java.util.function.Function;
public class StreamTokenValidator extends TokenValidator{
private StreamTokenizer tokenizer;
private int validated;
private int index;
private BufferedReader reader;
public StreamTokenValidator(StreamTokenizer tokenizer){
super(new Token[0]);
this.tokenizer = tokenizer;
}
// private boolean nextToken(){
//
// }
//
// public boolean hasNext(){
// return validated < elements.length;
// }
//
// public boolean validate(Function<Token, Boolean> action){
// if(validated >= this.elements.length) return false;
// if(!hasNext()) return false;
// if(action.apply(this.elements[validated])){
// if(validated+1 > MAX_VALIDATE){
// MAX_VALIDATE = validated+1;
// TOKENS = elements.length;
// }
// this.validated++;
// return true;
// }
// return false;
// }
//
// public boolean validate(Function<Token, Boolean> action, BiConsumer<Bag, Token> filler){
// if(validate(action)){
// filler.accept(getBag(), elements[validated-1]);
// return true;
// }
// return false;
// }
//
// public TokenValidator branch(){
// StreamTokenValidator branch = new StreamTokenValidator(reader);
// branch.elements = this.elements;
// branch.index = Math.max(0, this.validated-1);
// branch.validated = this.validated;
// branch.setBag(getBag());
// return branch;
// }
public void merge(TokenValidator branch){
StreamTokenValidator validator = (StreamTokenValidator)branch;
this.index = validator.index;
this.validated = validator.validated;
setBag(branch.getBag());
}
}

View file

@ -0,0 +1,7 @@
package be.jeffcheasey88.peeratcode.parser;
public class StreamTokenizer extends Tokenizer{
}

View file

@ -5,6 +5,8 @@ public enum TokenType{
NAME,
DELIMITER,
SPACE,
GROUP
GROUP,
STRING,
CHAR
}

View file

@ -29,7 +29,6 @@ public class JavaParser extends Parser<JavaElement> {
public JavaParser(){
Tokenizer tokenizer = new Tokenizer(){
@Override
public void parse(BufferedReader reader) throws Exception{
int lineNumber = 0;
@ -169,10 +168,25 @@ public class JavaParser extends Parser<JavaElement> {
StateTree<JavaElement> value_container = new StateTree<>();
StateTree<JavaElement> value_list = new StateTree<>();
StateTree<JavaElement> value_list_element = value_list.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
value_list_element.end((a,b) -> a);
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
.then(value_list_element);
StateTree<JavaElement> value_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new")));
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
value.then(value_name);
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(local)))
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(null)))
.end((a,b) -> a)
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a)
@ -192,7 +206,11 @@ public class JavaParser extends Parser<JavaElement> {
StateTree<JavaElement> value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]")));
value_array_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("inside", local)))
.then(value_array_end);
value_array_end.end((a,b) -> a);
value_array_end.end((a,b) -> a)
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a)
.multiple(value_list)
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
value_array_end.then(value_call);
value_array_end.then(value_array_begin);
@ -404,6 +422,7 @@ public class JavaParser extends Parser<JavaElement> {
variable_value.then(variable_split);
variable_value.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a);
variable_value.end((a,b) -> a);
//OPERATION
StateTree<JavaElement> operation = new StateTree<>();
@ -453,7 +472,7 @@ public class JavaParser extends Parser<JavaElement> {
StateTree<JavaElement> operation_try = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("try")));
StateTree<JavaElement> operation_try_base = operation_try.then((validator) -> validator.validate((token) -> token.getValue().equals("{")));
operation_try.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
.then(new RedirectStateTree<>(variable, (global, local) -> global.set(null)))
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
.then(operation_try_base);
StateTree<JavaElement> operation_try_end = operation_try_base.end((a,b) -> a)
@ -461,13 +480,12 @@ public class JavaParser extends Parser<JavaElement> {
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
.end((a,b) -> a);
// StateTree<JavaElement> operation_finally = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("finally")))
// .then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
// .end((a,b) -> a)
// .multiple(function_container)
// .unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
// .end((a,b) -> a);
//
StateTree<JavaElement> operation_finally = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("finally")));
operation_finally.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a)
.multiple(function_container)
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
.end((a,b) -> a);
StateTree<JavaElement> operation_catch_named = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("catch")))
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
@ -481,8 +499,8 @@ public class JavaParser extends Parser<JavaElement> {
.multiple(function_container)
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
.end((a,b) -> a);
// operation_catch.then(operation_finally);
// operation_catch.then(operation_catch);
operation_catch.then(operation_finally);
operation_catch.then(operation_catch_named);
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("continue")))
@ -622,7 +640,7 @@ public class JavaParser extends Parser<JavaElement> {
StateTree<JavaElement> function_name = function.then((validator) -> validator.validate(
(token) -> token.getType().equals(TokenType.NAME),
(bag, token) -> bag.set("mais ?",token)));
(bag, token) -> System.out.println("declared function "+token.getValue())));
function_type.then(function_name);
StateTree<JavaElement> function_begin = function_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
StateTree<JavaElement> function_end = function_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
@ -645,14 +663,18 @@ public class JavaParser extends Parser<JavaElement> {
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
StateTree<JavaElement> function_arg_mod = function_begin.then((validator) -> validator.validate((token) -> getModifier(token.getValue()) > 0));
StateTree<JavaElement> function_arg_type = function_begin.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
function_arg_mod.then(function_arg_type);
StateTree<JavaElement> function_arg_name = function_arg_type.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
function_arg_type.then((validator) ->
validator.validate((token) -> token.getValue().equals(".")) &&
validator.validate((token) -> token.getValue().equals(".")) &&
validator.validate((token) -> token.getValue().equals(".")))
.then(function_arg_name);
function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_arg_type);
StateTree<JavaElement> function_arg_split = function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
function_arg_split.then(function_arg_mod);
function_arg_split.then(function_arg_type);
function_arg_name.then(function_end);
@ -665,8 +687,6 @@ public class JavaParser extends Parser<JavaElement> {
.unique((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a);
braces_container.then(clazz_container);
//CLASS
StateTree<JavaElement> clazz_ = new StateTree<>();
StateTree<JavaElement> clazz = new StateTree<>();

View file

@ -6,9 +6,7 @@ import java.util.function.BiFunction;
import java.util.function.Function;
import be.jeffcheasey88.peeratcode.parser.Bag;
import be.jeffcheasey88.peeratcode.parser.Token;
import be.jeffcheasey88.peeratcode.parser.TokenValidator;
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
public class StateTree<E>{
@ -21,8 +19,7 @@ public class StateTree<E>{
this.childs = new ArrayList<>();
}
public void seed(Tokenizer tokenizer, E container){
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
public void seed(TokenValidator validator, E container){
while(validator.hasNext()){
BuilderStateTree<E, ?> build = internalSeed(validator, container);
if(build == null) break;

View file

@ -48,6 +48,7 @@ class GlobalCover {
TokenValidator.MAX_VALIDATE = 0;
TokenValidator.TOKENS = 0;
count++;
if(hasWriten) break;
}
}