Get Composant's dependencies

This commit is contained in:
jeffcheasey88 2023-07-15 15:37:13 +02:00
parent afbb114086
commit 8f2e7cffe9
3 changed files with 68 additions and 87 deletions

64
java.pc
View file

@ -1,61 +1,3 @@
annotation(
[@]
{name}= -> name
[(](
:end,
value -> val
[)]=,
:content
);
content:
:value -> values
[)]=;
value:
{name}
[=]
value -> add(value)(
:end,
[,]
:value
);
end:[)]=
)
modifier({modifier}*= -> concat(mod))
class(
annotation(
:mod,
:class
),
mod:modifier(
:class
),
class:[class]
type -> name(
:end,
:implements,
:extends
);
implements:[implements](
imp:type -> add(implement)(
[,]
:imp,
:end
)
);
extends:[extends](
type -> extend(
:end,
:implements
)
);
end:[{]=
)
import(
[import](
:static,
@ -67,8 +9,7 @@ import(
normal:[!;]* -> concat(import)
[;]=;
import,
class
import
)
package(
@ -76,8 +17,7 @@ package(
[!;]* -> concat(package)
[;]=;
import,
class
import
)
main(

View file

@ -26,9 +26,9 @@ public class StateTree<E>{
while(validator.hasNext()) {
System.out.println("seed");
E build = internalSeed(validator, container);
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
if(build == null) break;
}
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
}
<B> B internalSeed(TokenValidator validator, E element){

View file

@ -1,16 +1,16 @@
package be.jeffcheasey88.peeratcode.parser.state.generator;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import be.jeffcheasey88.peeratcode.parser.Bag;
import be.jeffcheasey88.peeratcode.parser.Parser;
@ -19,14 +19,13 @@ import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.ComposantCall;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.LinkedComposant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.MultipleWayComposant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.NamedElement;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.Redirection;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.Validator;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.ComposantCall;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.LinkedComposant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.MultipleWayComposant;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.NamedElement;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.Redirection;
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.SynthaxeComposant.Composant.Validator;
public class ParserComposantGenerator {
@ -43,6 +42,10 @@ public class ParserComposantGenerator {
public void generate() throws Exception{
SynthaxeComposant synthax = load();
Map<String, Set<String>> dependency = synthax.dependency();
for(Entry<String, Set<String>> entry : dependency.entrySet()){
System.out.println(entry.getKey()+" - "+entry.getValue());
}
}
private SynthaxeComposant load() throws Exception{
@ -351,20 +354,16 @@ public class ParserComposantGenerator {
};
parser.parse(reader, composant);
System.out.println();
System.out.println(composant);
System.out.println();
parser.build(new BufferedWriter(new FileWriter(new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-parseur\\java.out"))));
// parser.build(new BufferedWriter(new FileWriter(new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-parseur\\java.out"))));
return composant;
}
public static class Element{
public Element(){
public Element(){}
void dependency(Set<String> dependency) {}
}
public static class SynthaxeComposant extends Element{
@ -379,6 +378,14 @@ public class ParserComposantGenerator {
this.composants.put(name, composant);
}
private Map<String, Set<String>> dependency(){
Map<String, Set<String>> map = new HashMap<>();
for(Entry<String, Composant> entry : this.composants.entrySet()) map.put(entry.getKey(), entry.getValue().dependency());
return map;
}
@Override
public String toString(){
String elements = "";
@ -413,8 +420,15 @@ public class ParserComposantGenerator {
this.title = bag.<Token>get().getValue();
}
public Set<String> dependency(){
Set<String> result = new HashSet<>();
if(path != null) path.dependency(result);
for(MultipleWayComposant way : declared.values()) way.dependency(result);
if(next != null) next.dependency(result);
return result;
}
public void include(){
System.out.println("include "+title+" -> "+current);
if(path == null){
path = current;
current = new MultipleWayComposant();
@ -441,6 +455,12 @@ public class ParserComposantGenerator {
this.elements = new ArrayList<>();
}
@Override
public void dependency(Set<String> dependency){
for(Element element : elements) element.dependency(dependency);
}
@Override
public String toString(){
return "["+Arrays.toString(elements.toArray())+"]";
@ -455,6 +475,11 @@ public class ParserComposantGenerator {
this.elements = new ArrayList<>();
}
@Override
public void dependency(Set<String> dependency){
for(Element element : elements) element.dependency(dependency);
}
@Override
public String toString(){
return "<"+Arrays.toString(elements.toArray())+">";
@ -479,7 +504,11 @@ public class ParserComposantGenerator {
}
this.end = (bag.get("end") != null);
this.loop = (bag.get("loop") != null);
System.out.println(this);
}
@Override
public void dependency(Set<String> dependency){
if(composant != null) composant.dependency(dependency);
}
@Override
@ -505,6 +534,11 @@ public class ParserComposantGenerator {
}
}
@Override
public void dependency(Set<String> dependency){
child.dependency(dependency);
}
@Override
public String toString(){
return child+" -> "+((logic == null) ? name : logic+"("+name+")");
@ -520,7 +554,12 @@ public class ParserComposantGenerator {
public Redirection(Bag bag){
this.target = bag.<Token>get().getValue();
System.out.println(this);
}
@Override
public void dependency(Set<String> dependency){
dependency.add(target);
if(composant != null) composant.dependency(dependency);
}
@Override
@ -537,7 +576,11 @@ public class ParserComposantGenerator {
public ComposantCall(Bag bag){
this.name = bag.<Token>get().getValue();
System.out.println(this);
}
@Override
public void dependency(Set<String> dependency){
if(composant != null) composant.dependency(dependency);
}
@Override
@ -545,8 +588,6 @@ public class ParserComposantGenerator {
return ":"+name+((composant == null || composant.path == null) ? "":"("+composant+")");
}
}
}
}
}
}