Pause of synthaxe
This commit is contained in:
parent
efd96c26c3
commit
e7eb6a0f53
7 changed files with 120 additions and 24 deletions
|
@ -24,14 +24,18 @@ public class Parser<E>{
|
||||||
this.tokenizer.reset();
|
this.tokenizer.reset();
|
||||||
this.tokenizer.parse(reader);
|
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{
|
public final void parse(String line, E container) throws Exception{
|
||||||
this.tokenizer.reset();
|
this.tokenizer.reset();
|
||||||
this.tokenizer.parse(line);
|
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
|
//tmp
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package be.jeffcheasey88.peeratcode.parser;
|
||||||
|
|
||||||
|
public class StreamTokenizer extends Tokenizer{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -5,6 +5,8 @@ public enum TokenType{
|
||||||
NAME,
|
NAME,
|
||||||
DELIMITER,
|
DELIMITER,
|
||||||
SPACE,
|
SPACE,
|
||||||
GROUP
|
GROUP,
|
||||||
|
STRING,
|
||||||
|
CHAR
|
||||||
|
|
||||||
}
|
}
|
|
@ -29,7 +29,6 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
public JavaParser(){
|
public JavaParser(){
|
||||||
Tokenizer tokenizer = new Tokenizer(){
|
Tokenizer tokenizer = new Tokenizer(){
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void parse(BufferedReader reader) throws Exception{
|
public void parse(BufferedReader reader) throws Exception{
|
||||||
int lineNumber = 0;
|
int lineNumber = 0;
|
||||||
|
@ -169,10 +168,25 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
StateTree<JavaElement> value_container = new StateTree<>();
|
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_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new")));
|
||||||
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
||||||
value.then(value_name);
|
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)
|
.end((a,b) -> a)
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((a,b) -> a)
|
.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("]")));
|
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)))
|
value_array_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("inside", local)))
|
||||||
.then(value_array_end);
|
.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_call);
|
||||||
value_array_end.then(value_array_begin);
|
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(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);
|
||||||
|
variable_value.end((a,b) -> a);
|
||||||
|
|
||||||
//OPERATION
|
//OPERATION
|
||||||
StateTree<JavaElement> operation = new StateTree<>();
|
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 = 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("{")));
|
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("(")))
|
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((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
||||||
.then(operation_try_base);
|
.then(operation_try_base);
|
||||||
StateTree<JavaElement> operation_try_end = operation_try_base.end((a,b) -> a)
|
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("}")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
// StateTree<JavaElement> operation_finally = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("finally")))
|
StateTree<JavaElement> operation_finally = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("finally")));
|
||||||
// .then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
operation_finally.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
// .end((a,b) -> a)
|
.end((a,b) -> a)
|
||||||
// .multiple(function_container)
|
.multiple(function_container)
|
||||||
// .unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
||||||
// .end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
//
|
|
||||||
|
|
||||||
StateTree<JavaElement> operation_catch_named = operation_try_end.then((validator) -> validator.validate((token) -> token.getValue().equals("catch")))
|
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("(")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
||||||
|
@ -481,8 +499,8 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.multiple(function_container)
|
.multiple(function_container)
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
// operation_catch.then(operation_finally);
|
operation_catch.then(operation_finally);
|
||||||
// operation_catch.then(operation_catch);
|
operation_catch.then(operation_catch_named);
|
||||||
|
|
||||||
|
|
||||||
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("continue")))
|
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(
|
StateTree<JavaElement> function_name = function.then((validator) -> validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(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);
|
function_type.then(function_name);
|
||||||
StateTree<JavaElement> 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<JavaElement> 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(")")));
|
||||||
|
@ -645,14 +663,18 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
|
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)));
|
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)));
|
StateTree<JavaElement> function_arg_name = function_arg_type.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
||||||
function_arg_type.then((validator) ->
|
function_arg_type.then((validator) ->
|
||||||
validator.validate((token) -> token.getValue().equals(".")) &&
|
validator.validate((token) -> token.getValue().equals(".")) &&
|
||||||
validator.validate((token) -> token.getValue().equals(".")) &&
|
validator.validate((token) -> token.getValue().equals(".")) &&
|
||||||
validator.validate((token) -> token.getValue().equals(".")))
|
validator.validate((token) -> token.getValue().equals(".")))
|
||||||
.then(function_arg_name);
|
.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);
|
function_arg_name.then(function_end);
|
||||||
|
|
||||||
|
|
||||||
|
@ -665,8 +687,6 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
braces_container.then(clazz_container);
|
|
||||||
|
|
||||||
//CLASS
|
//CLASS
|
||||||
StateTree<JavaElement> clazz_ = new StateTree<>();
|
StateTree<JavaElement> clazz_ = new StateTree<>();
|
||||||
StateTree<JavaElement> clazz = new StateTree<>();
|
StateTree<JavaElement> clazz = new StateTree<>();
|
||||||
|
|
|
@ -6,9 +6,7 @@ import java.util.function.BiFunction;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.parser.Bag;
|
import be.jeffcheasey88.peeratcode.parser.Bag;
|
||||||
import be.jeffcheasey88.peeratcode.parser.Token;
|
|
||||||
import be.jeffcheasey88.peeratcode.parser.TokenValidator;
|
import be.jeffcheasey88.peeratcode.parser.TokenValidator;
|
||||||
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
|
|
||||||
|
|
||||||
public class StateTree<E>{
|
public class StateTree<E>{
|
||||||
|
|
||||||
|
@ -21,8 +19,7 @@ public class StateTree<E>{
|
||||||
this.childs = new ArrayList<>();
|
this.childs = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void seed(Tokenizer tokenizer, E container){
|
public void seed(TokenValidator validator, E container){
|
||||||
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
|
|
||||||
while(validator.hasNext()){
|
while(validator.hasNext()){
|
||||||
BuilderStateTree<E, ?> build = internalSeed(validator, container);
|
BuilderStateTree<E, ?> build = internalSeed(validator, container);
|
||||||
if(build == null) break;
|
if(build == null) break;
|
||||||
|
|
|
@ -48,6 +48,7 @@ class GlobalCover {
|
||||||
TokenValidator.MAX_VALIDATE = 0;
|
TokenValidator.MAX_VALIDATE = 0;
|
||||||
TokenValidator.TOKENS = 0;
|
TokenValidator.TOKENS = 0;
|
||||||
count++;
|
count++;
|
||||||
|
if(hasWriten) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue