diff options
author | johnvg | 2011-05-10 13:45:26 +0000 |
---|---|---|
committer | johnvg | 2011-05-10 13:45:26 +0000 |
commit | 851602809c397be0fa3bde9ed89eca0a9ebdd927 (patch) | |
tree | c2dd6a8facb349d1c78de019bc2d19822998f0b7 /sucl/strat.dcl | |
parent | delete portToNewSyntax (diff) |
delete sucl, the same files can be found in the branch sucl
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1940 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'sucl/strat.dcl')
-rw-r--r-- | sucl/strat.dcl | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/sucl/strat.dcl b/sucl/strat.dcl deleted file mode 100644 index c2b6ce6..0000000 --- a/sucl/strat.dcl +++ /dev/null @@ -1,183 +0,0 @@ -definition module strat - -// $Id$ - -from spine import Answer -from history import History -from rule import Rule -from graph import Graph,Node -from StdOverloaded import == -from StdClass import Eq -from cleanversion import String - -from history import HistoryAssociation,HistoryPattern,Link // for History -from spine import Spine // for Answer -from spine import Subspine // for Spine -from rule import Rgraph // for History -from basic import Optional // for Spine - -:: Strategy sym var pvar result - :== (Substrategy sym var pvar result) - (Graph sym var) - ((Subspine sym var pvar) -> result) - result - (Node sym var) - -> result - -:: Substrategy sym var pvar result - :== ((Spine sym var pvar) -> result) - result - var - -> result - -:: Law sym var pvar result - :== (Substrategy sym var pvar result) - (Graph sym var) - ((Subspine sym var pvar) -> result) - result - [var] - result - -> result - -// Apply a strategy recursively to a graph -// by deriving the substrategy from it and feeding it back to it -// Think Y operator -makernfstrategy - :: .(History sym var) // History of previous rooted graphs attached to nodes - (Strategy sym var pvar (Answer sym var pvar)) // Strategy for a defined node - .[var] // List of nodes known in RNF (closed pattern nodes of subject rule+strict args) - var // Root of replacement - (Graph sym var) // Subject graph - -> Answer sym var pvar - | Eq sym - & Eq var - & Eq pvar - - -/* ------------------------------------------------------------------------ -STRATEGY TRANSFORMERS -The funcions below tranform (simpler) strategies into more complicated ones ------------------------------------------------------------------------- */ - -// A strategy transformer that checks for partial applications -checkarity - :: !(sym -> Int) // Arity of function symbol - (Strategy sym var pvar .result) // Default strategy - (Substrategy sym var pvar .result) // Substrategy - (Graph sym var) // Subject graph - ((Subspine sym var pvar) -> .result) // Spine continuation - .result // RNF continuation - !.(Node sym var) // Subject node - -> .result - -// A strategy transformer that checks for constructor applications -checkconstr - :: (sym->String) - (sym->.Bool) - (Strategy sym var pvar .result) - (Substrategy sym var pvar .result) - (Graph sym var) - ((Subspine sym var pvar) -> .result) - .result - .(Node sym var) - -> .result - -// A strategy transformer that checks for primitive symbol applications -checkimport - :: !(sym->.Bool) - (Strategy sym var pvar .result) - (Substrategy sym var pvar .result) - (Graph sym var) - ((Subspine sym var pvar) -> .result) - .result - .(Node sym var) - -> .result - -// A strategy transformer that checks (hard coded) laws -checklaws - :: [(sym,Law sym var pvar result)] - (Strategy sym var pvar result) - (Substrategy sym var pvar result) - (Graph sym var) - ((Subspine sym var pvar) -> result) - result - (Node sym var) - -> result - | == sym - -// A strategy transformere that checks a list of rewrite rules -// This is the real thing that characterises the functional strategy -checkrules - :: ((Graph sym pvar) pvar var -> .Bool) - (sym -> .[Rule sym pvar]) - (Strategy sym var pvar result) - (Substrategy sym var pvar result) - (Graph sym var) - ((Subspine sym var pvar) -> result) - result - (Node sym var) - -> result - | == sym - & == var - & == pvar - -// A strategy transformer that checks a function application -// for strict arguments -checkstricts - :: !(sym -> [.Bool]) // Strict arguments of function - (Strategy sym var pvar .result) // Default strategy - (Substrategy sym var pvar .result) // Substrategy - (Graph sym var) // Subject graph - ((Subspine sym var pvar) -> .result) // Spine continuation - .result // RNF continuation - !.(Node sym var) // Subject node - -> .result - -/* ------------------------------------------------------------------------ -USEFUL AIDS FOR DEFINING STRATEGY TRANSFORMERS -The functions below are useful for inspecting a graph -such as done by a strategy transformer. ------------------------------------------------------------------------- */ - -// Force evaluation of stricts arguments of a node in the graph -forcenodes - :: (Substrategy sym var pvar .result) - ((Subspine sym var pvar) -> .result) - .result - !.[var] - -> .result - -// Try to apply a transformation rule (that doesn't need evaluated arguments) -rulelaw - :: (Rule sym pvar) - -> Law sym var pvar result - | == sym - & == var - & == pvar - -// Try to apply a law -trylaw - :: (Graph sym var) - (.(Subspine sym var pvar) -> result) - .[var] - (Rule sym pvar) - result - -> result - | == sym - & == var - & == pvar - -// Try a list of rewrite rules -// Requires argument evaluation for closed patterns -tryrules - :: ((Graph sym pvar) pvar var -> .Bool) - (Substrategy sym var pvar result) - (Graph sym var) - ((Subspine sym var pvar) -> result) - .[var] - -> result - .[Rule sym pvar] - -> result - | == sym - & == var - & == pvar |