diff options
Diffstat (limited to 'backendC/CleanCompilerSources/statesgen.print.c')
-rw-r--r-- | backendC/CleanCompilerSources/statesgen.print.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/backendC/CleanCompilerSources/statesgen.print.c b/backendC/CleanCompilerSources/statesgen.print.c new file mode 100644 index 0000000..f167195 --- /dev/null +++ b/backendC/CleanCompilerSources/statesgen.print.c @@ -0,0 +1,165 @@ + +#define PrintAnnotation(annot) + +static void PrintUnaryState (StateKind kind, ObjectKind obj) +{ + switch (kind) + { case OnB: FPutS ("OnB ", StdError); break; + case OnA: FPutS ("OnA ", StdError); break; + case StrictOnA: FPutS ("StrictOnA ", StdError); break; + case SemiStrict: FPutS ("SemiStrict ", StdError); break; + case StrictRedirection: FPutS ("StrictRedirection ", StdError); break; + case Parallel: FPutS ("Parallel ", StdError); break; + case Undefined: FPutS ("Undefined ", StdError); break; + case UnderEval: FPutS ("UnderEval ", StdError); break; + } + switch (obj){ + case UnknownObj: FPutS ("???", StdError); break; + case IntObj: FPutS ("Int ", StdError); break; + case BoolObj: FPutS ("Bool ", StdError); break; + case CharObj: FPutS ("Char ", StdError); break; + case StringObj: FPutS ("String ", StdError); break; + case RealObj: FPutS ("Real ", StdError); break; + case FileObj: FPutS ("File ", StdError); break; + case TupleObj: FPutS ("Tuple ", StdError); break; + case ListObj: FPutS ("List ", StdError); break; + case ProcIdObj: FPutS ("ProcId ", StdError); break; + } +} /* PrintUnaryState */ + + +static void PrintState (State state) +{ + return; + if (ArityOfState (state) == 1) + PrintUnaryState (KindOfState(state),ObjectOfState(state)); +} /* PrintState */ + + +static void PrintNode (Node node, Bool brackets); + +static void PrintNodeId (NodeId nid, Node follow) +{ + if (nid) + { if (nid -> nid_name) + FPrintF (StdError, "%d.%s",nid->nid_refcount, nid -> nid_name -> Name); + else + FPrintF (StdError, "%d.sel%ld",nid->nid_refcount, (long) nid); + if (follow) + FPutC (':', StdError); + } +} /* PrintNodeId */ + +static void PrintArgument (Args arg, Bool brackets) +{ + PrintState (arg -> arg_state); + PrintNodeId (arg -> arg_id, arg -> arg_pattern); + if (arg -> arg_pattern) + PrintNode (arg -> arg_pattern, brackets); + +} /* PrintArgument */ + +static void PrintArguments (Args args, char separator, Bool brackets) +{ + if (args) + { PrintArgument (args, brackets); + for (args = args -> arg_next; args; args = args -> arg_next) + { FPutC (separator, StdError); + PrintArgument (args, brackets); + } + } +} /* PrintArguments */ + +static void PrintNodeDefs (NodeDefs defs, Bool brackets); + +static void PrintNode (Node node, Bool brackets) +{ + if (IsOnACycle (node -> node_number)) + FPutS ("<C>", StdError); + PrintState (node -> node_state); + if (node -> node_kind == NormalNodeKind) + { if (node->node_symbol -> symb_kind == tuple_denot) + { FPutC ('(', StdError); + PrintArguments (GetNodeArguments(node), ',', False); + FPutC (')', StdError); + } + else if (node->node_symbol -> symb_kind == list_type) + { FPutC ('[', StdError); + PrintArguments (GetNodeArguments(node), ',', False); + FPutC (']', StdError); + } + else + { if (brackets && GetNodeArguments(node)) + FPutC ('(', StdError); + FPutS (ConvertSymbolToString (node->node_symbol), StdError); + if (GetNodeArguments(node)) + { FPutC (' ', StdError); + PrintArguments (GetNodeArguments(node),' ', True); + if (brackets) + FPutC (')', StdError); + } + } + } + else + { Args elsepart, thenpart, condpart = GetIfArguments(node); + thenpart = condpart -> arg_next; + elsepart = thenpart -> arg_next; + if (brackets) + FPutC ('(', StdError); + FPutS ("IF ", StdError); + PrintArgument (condpart, True); + FPutC ('\n', StdError); + FPutS ("THEN ", StdError); + PrintArgument (thenpart, True); + if (node->node_then_node_defs) + { FPutS ("[", StdError); + PrintNodeDefs (node->node_then_node_defs, False); + FPutS ("]\nELSE ", StdError); + } + else + FPutS ("\nELSE ", StdError); + PrintArgument (elsepart, True); + if (GetElseShared(node)) + { FPutS ("[\n", StdError); + PrintNodeDefs (GetElseShared(node), False); + FPutS ("]\n", StdError); + } + if (brackets) + FPutC (')', StdError); + } + +} /* PrintNode */ + +static void PrintNodeDefs (NodeDefs defs, Bool brackets) +{ + for ( ; defs; defs = defs -> def_next) + { FPrintF (StdError, "%d: ", (int) defs->def_number); + PrintNodeId (defs -> def_id, defs -> def_node); + if (defs -> def_node) + PrintNode (defs -> def_node, False); + FPutS ("\n", StdError); + } + +} /* PrintNodeDefs */ + +static void PrintRuleAlt (RuleAlts rulealt) +{ + PrintNode (rulealt -> alt_lhs -> def_node, False); + FPutS (" -> ", StdError); + if (rulealt -> alt_kind == Contractum) + PrintNodeDefs (rulealt -> alt_rhs.alt_rhs_graph, False); + else + FPutS (rulealt -> alt_rhs.alt_rhs_root -> redir_id -> nid_name -> Name, + StdError); + FPutS (";\n", StdError); + +} /* PrintRuleAlt */ + +static void PrintRule (Rule rule) +{ + RuleAlts rulealt = rule -> rule_alts; + + for (; rulealt; rulealt = rulealt -> alt_next); + PrintRuleAlt (rulealt); + +} /* PrintRule */ |