Skip to content

Commit

Permalink
Очистка графа от недостижимых вершин и оптимизация (#252)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kaelena committed Jun 29, 2020
1 parent 2fdbab0 commit 923d117
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 48 deletions.
63 changes: 37 additions & 26 deletions src/compiler/OptTree-AutoMarkup-BasisVertexesExtractor.ref
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,28 @@ $ENTRY OptTree-AutoMarkup-ExtractBasisVertexes {
>
}

/*
<OptTree-AutoMarkup-GetWalkOrder-ProcessGraphNode
(e.Child) (e.Order) (e.Graph)
>
== ((e.ProcessedBag) (e.Order) (e.Graph))
*/

OptTree-AutoMarkup-GetWalkOrder-ProcessGraphNode {
(Func (e.Name) Children (e.Children)) (e.ProcessedBag) (e.Order) (e.Graph)
= e.ProcessedBag (e.Name)
: e.ProcessedBagWithMe
= <MapAccum
{
((e.ProcessedBagAccumed) (e.OrderAccumed))
((e.ProcessedBagAccumed) (e.OrderAccumed) (e.Graph^))
(e.ChildName)
= <OptTree-AutoMarkup-Contains
(e.ChildName)
(e.ProcessedBagAccumed)
>
: {
True
= ((e.ProcessedBagAccumed) (e.OrderAccumed));
= ((e.ProcessedBagAccumed) (e.OrderAccumed) (e.Graph));

False
= <OptTree-AutoMarkup-GetElemByKey
Expand All @@ -57,24 +64,25 @@ OptTree-AutoMarkup-GetWalkOrder-ProcessGraphNode {
>;
}
}
((e.ProcessedBagWithMe) (e.Order)) e.Children
((e.ProcessedBagWithMe) (e.Order) (e.Graph)) e.Children
>
: ((e.ProcessedBagRes) (e.OrderRes))
= ((e.ProcessedBagRes) ((e.Name) e.OrderRes));
: ((e.ProcessedBagRes) (e.OrderRes) (e.Graph^))
= ((e.ProcessedBagRes) ((e.Name) e.OrderRes) (e.Graph));

() (e.ProcessedBag) (e.Order) (e.Graph)
= ((e.ProcessedBag) (e.Order));
= ((e.ProcessedBag) (e.Order) (e.Graph));
}

OptTree-AutoMarkup-GetWalkOrder {
e.Graph
= <MapAccum
{
((e.ProcessedBag) (e.Order)) (Func (e.Name) Children (e.Children))
((e.ProcessedBag) (e.Order) (e.Graph^))
(Func (e.Name) Children (e.Children))
= <OptTree-AutoMarkup-Contains (e.Name) (e.ProcessedBag)>
: {
True
= ((e.ProcessedBag) (e.Order));
= ((e.ProcessedBag) (e.Order) (e.Graph));

False
= <OptTree-AutoMarkup-GetWalkOrder-ProcessGraphNode
Expand All @@ -85,9 +93,9 @@ OptTree-AutoMarkup-GetWalkOrder {
>;
};
}
((/*processedBag*/) (/*order*/)) e.Graph
((/*processedBag*/) (/*order*/) (e.Graph)) e.Graph
>
: ((e.ProcessedBagRes) (e.OrderRes))
: ((e.ProcessedBagRes) (e.OrderRes) (e.Graph^))
= (e.OrderRes);
}

Expand All @@ -99,17 +107,18 @@ OptTree-AutoMarkup-GetExtractedComponents-ProcessGraphNode {
= e.CurExtractedComponent (e.Name)
: e.ExtractedComponentWithMe
= <OptTree-AutoMarkup-GetParents (e.Name) (e.Graph)>
: (e.Parents)
: e.Parents
= <MapAccum
{
((e.ProcessedBagAccumed) (e.ExtractedComponentAccumed))
((e.ProcessedBagAccumed) (e.ExtractedComponentAccumed) (e.Graph^))
(e.Name)
= (
(e.ProcessedBagAccumed)
(e.ExtractedComponentAccumed (e.Name _recursive))
(e.Graph)
);

((e.ProcessedBagAccumed) (e.ExtractedComponentAccumed))
((e.ProcessedBagAccumed) (e.ExtractedComponentAccumed) (e.Graph^))
(e.ParentName)
= <OptTree-AutoMarkup-Contains
(e.ParentName)
Expand All @@ -120,6 +129,7 @@ OptTree-AutoMarkup-GetExtractedComponents-ProcessGraphNode {
= (
(e.ProcessedBagAccumed)
(e.ExtractedComponentAccumed)
(e.Graph)
);

False
Expand All @@ -136,22 +146,22 @@ OptTree-AutoMarkup-GetExtractedComponents-ProcessGraphNode {
>;
}
}
((e.ProcessedBagWithMe) (e.ExtractedComponentWithMe)) e.Parents
((e.ProcessedBagWithMe) (e.ExtractedComponentWithMe) (e.Graph)) e.Parents
>;

() (e.ProcessedBag) (e.CurExtractedComponent) (e.Graph)
= ((e.ProcessedBag) (e.CurExtractedComponent));
= ((e.ProcessedBag) (e.CurExtractedComponent) (e.Graph));
}

OptTree-AutoMarkup-GetExtractedComponents {
(e.WalkOrder) (e.Graph)
= <MapAccum
{
((e.ProcessedBag) (e.ExtractedComponents)) (e.FuncName)
((e.ProcessedBag) (e.ExtractedComponents) (e.Graph^)) (e.FuncName)
= <OptTree-AutoMarkup-Contains (e.FuncName) (e.ProcessedBag)>
: {
True
= ((e.ProcessedBag) (e.ExtractedComponents));
= ((e.ProcessedBag) (e.ExtractedComponents) (e.Graph));

False
= <OptTree-AutoMarkup-GetElemByKey
Expand All @@ -165,26 +175,27 @@ OptTree-AutoMarkup-GetExtractedComponents {
()
(e.Graph)
>
: ((e.NextProcessedBag) (e.NextExtractedComponent))
: ((e.NextProcessedBag) (e.NextExtractedComponent) (e.Graph^))
= (
(e.NextProcessedBag)
(e.ExtractedComponents (e.NextExtractedComponent))
(e.Graph)
);
};
}
((/*processedBag*/) (/*extractedComponents*/)) e.WalkOrder
((/*processedBag*/) (/*extractedComponents*/) (e.Graph)) e.WalkOrder
>
: ((e.ProcessedBagRes) (e.ExtractedComponentsRes))
: ((e.ProcessedBagRes) (e.ExtractedComponentsRes) (e.Graph^))
= (e.ExtractedComponentsRes);
}

OptTree-AutoMarkup-GetNotBaseVertexes {
(e.StronglyConnectedComponents) (e.Graph)
= <Map
= <MapAccum
{
(Func (e.FuncName) Children (e.Children))
(Func (e.FuncName) Children (e.Children)) (e.Graph^)
= <OptTree-AutoMarkup-GetParents (e.FuncName) (e.Graph)>
: (e.Parents)
: e.Parents
= <Map
{
(e.CurrentComponent)
Expand All @@ -210,13 +221,13 @@ OptTree-AutoMarkup-GetNotBaseVertexes {
= (t.ComponentLength) (e.Diff)
: {
(1) (e.Diff)
= ;
= (e.Graph);

(t.ComponentLength) ()
= ;
= (e.Graph);

e.Other
= (e.FuncName);
= (e.FuncName) (e.Graph);
}
}
e.Graph
Expand Down
33 changes: 11 additions & 22 deletions src/compiler/OptTree-AutoMarkup-Common.ref
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,12 @@ $ENTRY OptTree-AutoMarkup-Contains {
*/

$ENTRY OptTree-AutoMarkup-GetElemByKey {
(e.Key) (e.Graph)
= <Map
{
e._ (Func (e.Key) Children (e.Children)) e._
= Func (e.Key) Children (e.Children);
(e.Key) (e.Graph-B (Func (e.Key) Children (e.Children)) e.Graph-E)
= Func (e.Key) Children (e.Children)
<OptTree-AutoMarkup-GetElemByKey (e.Key) (e.Graph-E)>;

e.Other
= ;
}
e.Graph
>
(e.Key) (e._)
= ;
}

/**
Expand All @@ -62,19 +57,13 @@ $ENTRY OptTree-AutoMarkup-GetElemByKey {
*/

$ENTRY OptTree-AutoMarkup-GetParents {
(e.ChildName) (e.Graph)
= <Map
{
e._ (Func (e.FuncName) Children (e._ (e.ChildName) e._)) e._
= (e.FuncName);
(e.ChildName)
(e.Graph-B (Func (e.FuncName) Children (e._ (e.ChildName) e._)) e.Graph-E)
= (e.FuncName)
<OptTree-AutoMarkup-GetParents (e.ChildName) (e.Graph-E)>;

e.Other
= ;
}
e.Graph
>
: e.Res
= (e.Res)
(e.ChildName) (e._)
= ;
}

$ENTRY OptTree-AutoMarkup-IsEmpty {
Expand Down
86 changes: 86 additions & 0 deletions src/compiler/OptTree-AutoMarkup-GraphExtractor.ref
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ $INCLUDE "LibraryEx";
*$FROM DisplayName
$EXTERN DisplayName;

*$FROM OptTree-AutoMarkup-Common
$EXTERN OptTree-AutoMarkup-Contains,
OptTree-AutoMarkup-GetElemByKey;

/**
<OptTree-AutoMarkup-ExtractGraph e.AST> == e.FunctionCallsGraph
*/
Expand All @@ -16,7 +20,89 @@ $ENTRY OptTree-AutoMarkup-ExtractFunctionCallsGraph {
= <OptTree-AutoMarkup-InlineFuncCallsWithMetatable
(e.ExtractedFuncs)
(e.ExtractedMetaTables)
>
: e.InlinedGraph
= <Map &OptTree-AutoMarkup-GetEntryPoints e.AST>
: e.EntryPoints
= <OptTree-AutoMarkup-GetClearedByEntryPointsGraph
(e.InlinedGraph)
(e.EntryPoints)
>
: e.Res
= <Unique e.Res>;
}

OptTree-AutoMarkup-GetEntryPoints {
(Function GN-Entry (e.FuncName) Sentences e.Body)
= (e.FuncName);

(Function s.Scope (e.FuncName) Sentences e.Body)
,<OneOf (e.FuncName) (INIT) (FINAL)> : True
= (e.FuncName);

e.Smth
= ;
}

OptTree-AutoMarkup-GetClearedByEntryPointsGraph {
(e.Graph) (e.EntryPoints)
= <OptTree-AutoMarkup-GetClearedByEntryPointsGraph
(e.Graph)
()
(e.EntryPoints)
>;

(e.Graph) (e.ProccessedNodes) (e.EntryPoints)
= <MapAccum
{
((e.ProcessedNodes) (e.Result) (e.Graph^))
(e.EntryPoint)
, <OptTree-AutoMarkup-Contains
(e.EntryPoint)
(e.ProcessedNodes)
> : False
= (e.ProcessedNodes (e.EntryPoint))
: (e.NewProcessedNodes)
= <OptTree-AutoMarkup-GetElemByKey
(e.EntryPoint)
(e.Graph)
>
: e.Node
= e.Node
: {
Func (e.FuncName) Children (e.Children)
= <OptTree-AutoMarkup-GetClearedByEntryPointsGraph
(e.Graph)
(e.NewProcessedNodes)
(e.Children)
>
: e.SubTreeResult
= (
(e.NewProcessedNodes)
(
e.Result
(Func (e.FuncName) Children (e.Children))
e.SubTreeResult
)
(e.Graph)
);

e._
= (
(e.NewProcessedNodes)
(e.Result)
(e.Graph)
);
};


((e.ProcessedNodes) (e.Result) (e.Graph^)) e.Other
= ((e.ProcessedNodes) (e.Result) (e.Graph));
}
((e.ProccessedNodes) (/*result*/) (e.Graph)) e.EntryPoints
>
: ((e.ProccessedNodes^) (e.Result) (e.Graph^))
= e.Result
}

OptTree-AutoMarkup-GetMetatables {
Expand Down

0 comments on commit 923d117

Please sign in to comment.