Compare commits

...

3 commits

Author SHA1 Message Date
jeffcheasey88
d319163f60 je sais plus ce que j'ai édit? 2023-11-06 15:12:29 +01:00
jeffcheasey88
c768eb2c63 ReturnOperation in parent 2023-11-06 14:55:48 +01:00
jeffcheasey88
6b1ce3a1f4 Char as TokenType 2023-11-06 14:42:22 +01:00
4 changed files with 58 additions and 36 deletions

View file

@ -57,17 +57,21 @@ public class Annotation extends JavaElement{
@Override @Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){ public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(this.values != null){
for(Value value : this.values.values()){ for(Value value : this.values.values()){
if(finder.apply(value)) return (E)value; if(finder.apply(value)) return (E)value;
} }
}
return null; return null;
} }
@Override @Override
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){ public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){
if(this.values != null){
for(Value value : this.values.values()){ for(Value value : this.values.values()){
if(finder.apply(value)) list.add((E)value); if(finder.apply(value)) list.add((E)value);
value.findAll(finder, list); value.findAll(finder, list);
} }
} }
}
} }

View file

@ -23,7 +23,10 @@ import dev.peerat.parser.TokenValidator;
import dev.peerat.parser.Tokenizer; import dev.peerat.parser.Tokenizer;
import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Annotation.AnnotableBuffer;
import dev.peerat.parser.java.Function.FunctionContainer; import dev.peerat.parser.java.Function.FunctionContainer;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Value.BiValue;
import dev.peerat.parser.java.Variable.VariableContainer; import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.state.BuilderStateTree; import dev.peerat.parser.state.BuilderStateTree;
import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.InitialStateTree;
import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.RedirectStateTree;
@ -88,6 +91,24 @@ public class JavaParser extends Parser<JavaElement> {
token = new Token(lineNumber, i+1, value, TokenType.STRING); token = new Token(lineNumber, i+1, value, TokenType.STRING);
i = j-1; i = j-1;
System.out.println(token); System.out.println(token);
}else if(c == '\''){
String value = "'";
int j = i+1;
for(; j < line.length(); j++){
c = line.charAt(j);
if(c == '\''){
value+=c;
j++;
break;
}else if(c == '\\'){
value+=c+line.charAt(++j);
}else{
value+=c;
}
}
token = new Token(lineNumber, i+1, value, TokenType.CHAR);
i = j-1;
System.out.println(token);
}else{ }else{
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '/')) break; if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '/')) break;
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '*')){ if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '*')){
@ -199,17 +220,18 @@ public class JavaParser extends Parser<JavaElement> {
//VALUE //VALUE
BiFunction<JavaElement, Bag, JavaElement> value_builder = (parent, bag) -> { BiFunction<JavaElement, Bag, JavaElement> value_builder = (parent, bag) -> {
// if(bag.has("right")){ System.out.println(bag);
// if(bag.has("right")){
// BiValue result = new BiValue(
// BiValue result = new BiValue(
// bag.get("left"),
// bag.get("left"),
// bag.get("action"),
// bag.get("action"),
// bag.get("right"));
// bag.set(result); bag.get("right"));
// } bag.set(result);
}
return null; return null;
}; };
@ -234,21 +256,8 @@ public class JavaParser extends Parser<JavaElement> {
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
.then(value_list_element); .then(value_list_element);
value.then((validator) -> {
if(validator.validate((token) -> token.getValue().equals("'"))){
validator.validate((token) -> token.getValue().equals("\\"));
return
validator.validate((token) -> token.getValue().equals("'"))
||
(validator.validate((token) -> !token.getValue().equals("'"))
&& validator.validate((token) -> token.getValue().equals("'")));
}
return false;
}).end();
value.then((validator) -> validator.validate( value.then((validator) -> validator.validate(
(token) -> token.getType().equals(TokenType.STRING), (token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR),
(bag, token) -> bag.set(token))) (bag, token) -> bag.set(token)))
.end((parent,bag) -> { .end((parent,bag) -> {
bag.set(new Value(bag.<Token>get())); bag.set(new Value(bag.<Token>get()));
@ -258,7 +267,7 @@ public class JavaParser extends Parser<JavaElement> {
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(null))) value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(local.get())))
.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)
@ -548,11 +557,20 @@ public class JavaParser extends Parser<JavaElement> {
operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value); operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value);
StateTree<JavaElement> operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return"))); StateTree<JavaElement> operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return")));
operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a); .end((parent,bag) -> {
ReturnOperation op = new ReturnOperation(bag.get());
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null;
});
operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a); .end((parent,bag) -> {
ReturnOperation op = new ReturnOperation(bag.get());
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null;
});
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw"))) operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw")))
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))

View file

@ -14,7 +14,7 @@ public class WhileOperation extends OperationBag{
this.condition = condition; this.condition = condition;
} }
public Value getCondition(){s public Value getCondition(){
return this.condition; return this.condition;
} }

View file

@ -267,6 +267,6 @@ public class ValueTests {
@Test @Test
void doubleInDouble() throws Exception{ void doubleInDouble() throws Exception{
JavaElement result = testCase("(jeffcheasey88 == goefra) || (yuzzu == yugs) || (test == \"Content-Disposition: form-data; name=\\\"?\\\"\")"); JavaElement result = testCase("(jeffcheasey88 == goefra) || (yuzzu == yugs)");
} }
} }