Capture all tokens from composant parser

This commit is contained in:
jeffcheasey88 2023-07-12 17:39:48 +02:00
parent 35110db4e2
commit c8c92687e8
3 changed files with 29 additions and 18 deletions

10
java.pc
View file

@ -33,7 +33,7 @@ class(
mod:modifier( mod:modifier(
:class :class
), ),
class:[class], class:[class]
type -> name( type -> name(
:end, :end,
:implements, :implements,
@ -45,13 +45,13 @@ class(
:imp, :imp,
:end :end
) )
) );
extends:[extends]( extends:[extends](
type -> extend( type -> extend(
:implements, :end,
:end :implements
) )
) );
end:[{]= end:[{]=
) )

View file

@ -28,10 +28,6 @@ public class RedirectStateTree<E, T extends E> extends StateTree<T>{
validator.setBag(localBag); validator.setBag(localBag);
TokenValidator branch = validator.branch(); TokenValidator branch = validator.branch();
branch.validate((t) -> {
System.out.println(t);
return false;
});
Object builded = redirect.internalSeed(branch, (E) element); Object builded = redirect.internalSeed(branch, (E) element);
// System.out.println("redirect "+localBag.path()+" builded "+builded); // System.out.println("redirect "+localBag.path()+" builded "+builded);
if(builded == null) return null; if(builded == null) return null;

View file

@ -5,9 +5,12 @@ 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.FileWriter;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Parser;
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.RedirectStateTree; import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
@ -50,11 +53,11 @@ public class ParserComposantGenerator {
StateTree<Element> simpleAction = validator StateTree<Element> simpleAction = validator
.then((v) -> v.validate((t) -> t.getValue().equals("["))) .then((v) -> v.validate((t) -> t.getValue().equals("[")))
.then((v) -> v.validate((t) -> true, (bag, t) -> bag.set(t))) .then((v) -> v.validate((t) -> !t.getValue().equals("]"), (bag, t) -> bag.set(t))).loop()
.then((v) -> v.validate((t) -> t.getValue().equals("]"))); .then((v) -> v.validate((t) -> t.getValue().equals("]")));
StateTree<Element> customAction = validator StateTree<Element> customAction = validator
.then((v) -> v.validate((t) -> t.getValue().equals("{"))) .then((v) -> v.validate((t) -> t.getValue().equals("{")))
.then((v) -> v.validate((t) -> true, (bag, t) -> bag.set(t))) .then((v) -> v.validate((t) -> !t.getValue().equals("}"), (bag, t) -> bag.set(t))).loop()
.then((v) -> v.validate((t) -> t.getValue().equals("}"))); .then((v) -> v.validate((t) -> t.getValue().equals("}")));
simpleAction.then(modifiers); simpleAction.then(modifiers);
customAction.then(modifiers); customAction.then(modifiers);
@ -99,7 +102,13 @@ public class ParserComposantGenerator {
op_childs.then((v) -> v.validate((t) -> t.getValue().equals("("))) op_childs.then((v) -> v.validate((t) -> t.getValue().equals("(")))
.then(new RedirectStateTree<>(operations, (bag) -> "?")) .then(new RedirectStateTree<>(operations, (bag) -> "?"))
.then((v) -> v.validate((t) -> t.getValue().equals(")"))) .then((v) -> v.validate((t) -> t.getValue().equals(")")))
.end((composant, bag) -> composant); .end((composant, bag) -> {
System.out.println("\t"+bag);
return composant;
});
operation.then(new RedirectStateTree<>(gotoValidator, (bag) -> "?"))
.then(operations);
StateTree<Element> op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "?")); StateTree<Element> op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "?"));
op_validator.end((composant, bag) -> composant).then(op_childs); op_validator.end((composant, bag) -> composant).then(op_childs);
@ -113,8 +122,6 @@ public class ParserComposantGenerator {
op_redirect.end((composant, bag) -> composant).then(op_childs); op_redirect.end((composant, bag) -> composant).then(op_childs);
op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "?")).end((composant, bag) -> composant).then(op_childs); op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "?")).end((composant, bag) -> composant).then(op_childs);
operation.then(new RedirectStateTree<>(gotoValidator, (bag) -> "?")).then(operations);
StateTree<Element> suit = operations.then(new RedirectStateTree<>(operation, (bag) -> "?")).loop(); StateTree<Element> suit = operations.then(new RedirectStateTree<>(operation, (bag) -> "?")).loop();
suit.then((v) -> v.validate((t) -> t.getValue().equals(","))) suit.then((v) -> v.validate((t) -> t.getValue().equals(",")))
.then(suit).end((composant, bag) -> composant); .then(suit).end((composant, bag) -> composant);
@ -126,9 +133,14 @@ public class ParserComposantGenerator {
StateTree<Element> composant = main.then((v) -> v.validate( StateTree<Element> composant = main.then((v) -> v.validate(
(token) -> token.getType().equals(TokenType.NAME), (token) -> token.getType().equals(TokenType.NAME),
(bag, token) -> bag.set("name", token) (bag, token) -> bag.set(token)
)); ));
composant.then(new RedirectStateTree<>(op_childs, (bag) -> "?")).loop(); composant.then(new RedirectStateTree<>(op_childs, (bag) -> "content"))
.end((element, bag) -> {
System.out.println(bag);
return element;
})
.then(composant);
setTokenizer(new Tokenizer()); setTokenizer(new Tokenizer());
@ -150,12 +162,15 @@ public class ParserComposantGenerator {
public static class SynthaxeComposant extends Element{ public static class SynthaxeComposant extends Element{
private List<Composant> composants; private Map<String, Composant> composants;
public SynthaxeComposant(){ public SynthaxeComposant(){
this.composants = new HashMap<>();
} }
void register(String name, Composant composant){
this.composants.put(name, composant);
}
public static class Composant extends Element{ public static class Composant extends Element{