Tom(DeclGL(GL("\n#include\n#include \n\n#include \n#include \n\nchar *getString(ATerm t);\nchar *decapString(ATerm t);\nchar *getSortTom(ATerm sort);\nchar *getSortGL(ATerm sort);\nATerm getSymbolRule(ATerm rule);\nATermList genOneToOneMatching(ATermList result, ATerm lhs, ATerm rhs, char *path, int nextlab, int deep);\nATerm getSymbolName(ATerm symbol);\nATerm getSymbolSort(ATerm symbol);\nATerm getSymbolCode(ATerm symbol);\n \nstatic AFun f_Tom;\nstatic AFun f_DeclGL;\nstatic AFun f_MainGL;\nstatic AFun f_DeclListTom;\nstatic AFun f_RuleListTom;\n\nstatic AFun f_Rule; \nstatic AFun f_RhsGL; \nstatic AFun f_SortDecl; \nstatic AFun f_SortsToSort; \nstatic AFun f_GetFunSymDecl;\nstatic AFun f_GetSubtermDecl;\nstatic AFun f_TermsEqualDecl;\nstatic AFun f_VariableDecl;\nstatic AFun f_Variable;\nstatic AFun f_GL;\nstatic AFun f_ApiGL;\nstatic AFun f_CodeGL;\nstatic AFun f_SymbolDecl;\nstatic AFun f_SymbolTom;\nstatic AFun f_Appl;\n\nstatic AFun f_empty;\nstatic AFun f_cons;\nstatic AFun f_sort;\n\n// Goal Language \nstatic AFun f_TomGL;\nstatic AFun f_RuleSortedListTom;\nstatic AFun f_RuleSetGL;\nstatic AFun f_VariableList;\nstatic AFun f_IfThenElseGL;\n \nATermList empty() {\n return ATmakeList0();\n}\n\nATermList cons(ATerm t, ATermList l) {\n return ATinsert(l,t);\n}\n \n")),DeclListTom([SortDecl(Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),SortDecl(Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),SortDecl(Sort(SortTom("int"),SortGL(GL("int")))),SortDecl(Sort(SortTom("void"),SortGL(GL("void")))),SortDecl(Sort(SortTom("ATermTable"),SortGL(GL("ATermTable")))),GetFunSymDecl(Variable(Name("xx"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),ApiGL(GL("(ATgetAFun(xx))"))),GetSubtermDecl(Variable(Name("xx"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("n"),Sort(SortTom("int"),SortGL(GL("int")))),ApiGL(GL("(ATgetArgument(xx,n))"))),GetFunSymDecl(Variable(Name("xx"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),ApiGL(GL("((ATisEmpty(xx))?f_empty:f_cons)"))),GetSubtermDecl(Variable(Name("xx"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("n"),Sort(SortTom("int"),SortGL(GL("int")))),ApiGL(GL("((n==0)?ATgetFirst(xx):(ATerm)ATgetNext(xx))"))),SymbolDecl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__")))),SymbolDecl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__")))),SymbolDecl(SymbolTom(Name("prettyPrintList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__")))),SymbolDecl(SymbolTom(Name("Tom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Tom")))),SymbolDecl(SymbolTom(Name("DeclGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_DeclGL")))),SymbolDecl(SymbolTom(Name("MainGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_MainGL")))),SymbolDecl(SymbolTom(Name("DeclListTom"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_DeclListTom")))),SymbolDecl(SymbolTom(Name("RuleListTom"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleListTom")))),SymbolDecl(SymbolTom(Name("Rule"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Rule")))),SymbolDecl(SymbolTom(Name("RhsGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RhsGL")))),SymbolDecl(SymbolTom(Name("SortDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortDecl")))),SymbolDecl(SymbolTom(Name("SortsToSort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortsToSort")))),SymbolDecl(SymbolTom(Name("GetFunSymDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetFunSymDecl")))),SymbolDecl(SymbolTom(Name("GetSubtermDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetSubtermDecl")))),SymbolDecl(SymbolTom(Name("TermsEqualDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_TermsEqualDecl")))),SymbolDecl(SymbolTom(Name("VariableDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableDecl")))),SymbolDecl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable")))),SymbolDecl(SymbolTom(Name("GL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GL")))),SymbolDecl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL")))),SymbolDecl(SymbolTom(Name("CodeGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_CodeGL")))),SymbolDecl(SymbolTom(Name("SymbolDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolDecl")))),SymbolDecl(SymbolTom(Name("SymbolTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolTom")))),SymbolDecl(SymbolTom(Name("Appl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Appl")))),SymbolDecl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty")))),SymbolDecl(SymbolTom(Name("cons"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_cons")))),SymbolDecl(SymbolTom(Name("sort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_sort")))),SymbolDecl(SymbolTom(Name("TomGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_TomGL")))),SymbolDecl(SymbolTom(Name("RuleSortedListTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleSortedListTom")))),SymbolDecl(SymbolTom(Name("RuleSetGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleSetGL")))),SymbolDecl(SymbolTom(Name("VariableList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableList")))),SymbolDecl(SymbolTom(Name("IfThenElseGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_IfThenElseGL")))),SymbolDecl(SymbolTom(Name("collectVariable"),SortsToSort([Sort(SortTom("ATermTable"),SortGL(GL("ATermTable"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__")))),VariableDecl(Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("v4"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))),VariableDecl(Variable(Name("l1"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))),VariableDecl(Variable(Name("l2"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))),VariableDecl(Variable(Name("vDeclGL"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("vMainGL"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("vDeclList"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))),VariableDecl(Variable(Name("vRuleList"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))),VariableDecl(Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("name2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("sort2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))),VariableDecl(Variable(Name("vTable"),Sort(SortTom("ATermTable"),SortGL(GL("ATermTable")))))]),RuleListTom([Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("Tom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Tom"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("v4"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n ATerm declPart = compile(v1);\n ATerm declListPart = compile(v2);\n ATerm ruleListPart = compile(v3);\n ATerm mainPart = compile(v4);\n return (ATerm)ATmakeAppl4(f_TomGL,declPart,declListPart,ruleListPart,mainPart);\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("DeclGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_DeclGL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("return t;"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("DeclListTom"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_DeclListTom"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n ATermList res = empty();\n ATerm c;\n while(!ATisEmpty(l)) {\n c = compile(ATgetFirst(l));\n if(c != NULL) {\n res = cons(c,res);\n }\n l = ATgetNext(l);\n }\n return (ATerm) res;\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("RuleListTom"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleListTom"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n ATermTable table = ATtableCreate(20,100);\n ATerm c, rule, topSymbol;\n ATermList ruleList, keyList;\n ATermList res = empty();\n \n while(!ATisEmpty(l)) {\n rule = ATgetFirst(l);\n topSymbol = getSymbolRule(rule);\n ruleList = (ATermList)ATtableGet(table,topSymbol);\n if(ruleList == NULL) {\n ruleList = empty();\n }\n ruleList = ATappend(ruleList,rule);\n ATtablePut(table,topSymbol,(ATerm)ruleList);\n l = ATgetNext(l);\n }\n\n keyList = ATtableKeys(table);\n while(!ATisEmpty(keyList)) {\n //ATprintf(\"key = %t\\n\",ATgetFirst(keyList));\n topSymbol = ATgetFirst(keyList);\n ruleList = (ATermList)ATtableGet(table,topSymbol);\n //ATprintf(\"rules = %l\\n\",ruleList);\n\n /*\n * for each ruleList: build a matching automaton\n */\n c = compile((ATerm)ATmakeAppl2(f_RuleSortedListTom,topSymbol,(ATerm)ruleList));\n if(c != NULL) {\n res = cons(c,res);\n }\n keyList = ATgetNext(keyList);\n }\n return (ATerm)res;\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("RuleSortedListTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleSortedListTom"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n // t is the top-symbol\n ATerm lhs,rhs;\n ATermList result = empty();\n char path[256];\n char s[256];\n\n ATermTable table = ATtableCreate(20,100);\n ATerm variableList;\n int nextlab = 0;\n \n while(!ATisEmpty(l)) {\n ATmatch(ATgetFirst(l),\"Rule(,RhsGL())\",&lhs,&rhs);\n collectVariable(table,lhs);\n \n path[0]=0;\n result = genOneToOneMatching(result,lhs,rhs,path,nextlab+1,0);\n result = ATappend(result,ATmake(\"GL()\",decapString(rhs)));\n sprintf(s,\"lab%d:;\",nextlab+1);\n result = ATappend(result,ATmake(\"GL()\",s));\n nextlab++;\n l = ATgetNext(l);\n }\n variableList = (ATerm)ATmakeAppl1(f_VariableList,(ATerm)ATtableKeys(table));\n //ATprintf(\"keyList = %l\\n\",keyList);\n return (ATerm)ATmakeAppl3(f_RuleSetGL,t,variableList,(ATerm)result);\n}"))),Rule(Appl(SymbolTom(Name("collectVariable"),SortsToSort([Sort(SortTom("ATermTable"),SortGL(GL("ATermTable"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("vTable"),Sort(SortTom("ATermTable"),SortGL(GL("ATermTable")))),Appl(SymbolTom(Name("Appl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Appl"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty"))),[])])]),RhsGL(GL("{\n return;\n}"))),Rule(Appl(SymbolTom(Name("collectVariable"),SortsToSort([Sort(SortTom("ATermTable"),SortGL(GL("ATermTable"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("vTable"),Sort(SortTom("ATermTable"),SortGL(GL("ATermTable")))),Appl(SymbolTom(Name("Appl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Appl"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n while(!ATisEmpty(l)) {\n collectVariable(vTable,ATgetFirst(l));\n l = ATgetNext(l) ;\n }\n return;\n}"))),Rule(Appl(SymbolTom(Name("collectVariable"),SortsToSort([Sort(SortTom("ATermTable"),SortGL(GL("ATermTable"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("vTable"),Sort(SortTom("ATermTable"),SortGL(GL("ATermTable")))),Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n ATerm variable = _2;\n ATtablePut(vTable,variable,variable);\n return;\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("MainGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_MainGL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("return t;"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("SortDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortDecl"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("return NULL;"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("VariableDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableDecl"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("return NULL;"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("GetFunSymDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetFunSymDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n char s[1024];\n sprintf(s,\"#define GET_FUN_SYM_%s(%s) %s\",decapString(ATgetArgument((ATermAppl) sort1,0)),\n decapString(name1),decapString(t));\n //printf(\"*** s= '%s'\\n\",s);\n return ATmake(\"GL()\",s);\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("GetSubtermDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetSubtermDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n char s[1024];\n sprintf(s,\"#define GET_SUBTERM_%s(%s,%s) %s\",decapString(ATgetArgument((ATermAppl) sort1,0)),\n decapString(name1),decapString(name2),decapString(t));\n return ATmake(\"GL()\",s);\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("TermsEqualDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_TermsEqualDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n char s[1024];\n sprintf(s,\"#define TERMS_EQUAL_%s(%s,%s) %s\",decapString(ATgetArgument((ATermAppl) sort1,0)),\n decapString(name1),decapString(name2),decapString(t));\n return ATmake(\"GL()\",s);\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("SymbolDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolDecl"))),[Appl(SymbolTom(Name("SymbolTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolTom"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("SortsToSort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortsToSort"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n char s[1024];\n char arg[128];\n int argno=1;\n\n if(!ATisEmpty(l)) {\n sprintf(s,\"%s %s\",getSortGL(sort1),decapString(name1));\n \n if(!ATisEmpty(l)) {\n strcat(s,\"(\");\n while (!ATisEmpty(l)) {\n sprintf(arg,\"%s _%d\",getSortGL(ATgetFirst(l)),argno);\n argno++;\n strcat(s,arg);\n l = ATgetNext(l) ;\n if(!ATisEmpty(l)) {\n strcat(s,\",\");\n }\n }\n strcat(s,\");\");\n }\n //printf(\"%s\\n\",s);\n return ATmake(\"GL()\",s);\n }\n return NULL;\n}"))),Rule(Appl(SymbolTom(Name("compile"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),RhsGL(GL("{\n ATprintf(\"Cannot compile: %t\\n\",t);\n exit(1);\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("TomGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_TomGL"))),[Variable(Name("vDeclGL"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("vDeclList"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("vRuleList"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("vMainGL"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n ATprintf(\"%s\\n\", decapString(vDeclGL)); \n prettyPrintList(vDeclList); \n prettyPrintList(vRuleList); \n ATprintf(\"%s\\n\", decapString(vMainGL));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("SortDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortDecl"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n printf(\"%ctype %s %s\",'%',getSortTom(v1),getSortGL(v1));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("GetFunSymDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetFunSymDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n printf(\"%cGET_FUN_SYM %s %s %s\\n\",'%',getSortTom(sort1),decapString(name1),decapString(v3));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("GetSubtermDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GetSubtermDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n printf(\"%cGET_SUBTERM %s %s %s %s\\n\",'%',getSortTom(sort1),decapString(name1),\n decapString(name2),decapString(v3));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("TermsEqualDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_TermsEqualDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Appl(SymbolTom(Name("ApiGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_ApiGL"))),[Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n printf(\"%cTERMS_EQUAL %s %s %s %s\\n\",'%',getSortTom(sort1),decapString(name1),\n decapString(name2),decapString(v3));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("VariableDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableDecl"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n printf(\"%cvar %s %s\\n\",'%',getSortTom(sort1),decapString(name1));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("SymbolDecl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolDecl"))),[Appl(SymbolTom(Name("SymbolTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolTom"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("SortsToSort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortsToSort"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("CodeGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_CodeGL"))),[Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])])]),RhsGL(GL("{\n char *str;\n \n printf(\"%csym %s %s\",'%',getSortTom(sort1),decapString(name1));\n\n //ATprintf(\"\\nl = %t\\n\",l);\n //l = sort(l);\n //ATprintf(\"\\nnew l = %t\\n\",l);\n if(!ATisEmpty(l)) {\n printf(\"(\") ;\n while (!ATisEmpty(l)) {\n printf(\"%s\",getSortTom(ATgetFirst(l)));\n l = ATgetNext(l) ;\n if(!ATisEmpty(l)) printf(\",\") ;\n }\n printf(\")\") ;\n }\n str = decapString(v3);\n if(*str==0) {\n printf(\"\\n\");\n } else {\n printf(\" %c %s\\n\",'%',str);\n }\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("RuleSetGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RuleSetGL"))),[Appl(SymbolTom(Name("SymbolTom"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SymbolTom"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("SortsToSort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_SortsToSort"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("CodeGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_CodeGL"))),[Variable(Name("v3"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l2"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n char s[1024];\n char arg[128];\n int argno=1;\n\n if(!ATisEmpty(l)) {\n sprintf(s,\"%s %s\",getSortGL(sort1),decapString(name1));\n if(!ATisEmpty(l)) {\n strcat(s,\"(\");\n while (!ATisEmpty(l)) {\n sprintf(arg,\"%s _%d\",getSortGL(ATgetFirst(l)),argno);\n argno++;\n strcat(s,arg);\n l = ATgetNext(l) ;\n if(!ATisEmpty(l)) {\n strcat(s,\",\");\n }\n }\n strcat(s,\") {\\n\");\n }\n printf(\"%s\\n\",s);\n }\n\n prettyPrint(v1);\n prettyPrintList(l2);\n printf(\"}\\n\");\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("VariableList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableList"))),[Appl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty"))),[])])]),RhsGL(GL("return;"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("VariableList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_VariableList"))),[Appl(SymbolTom(Name("cons"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_cons"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])])]),RhsGL(GL("{\n printf(\"%s %s;\\n\",getSortGL(sort1),decapString(name1));\n prettyPrint((ATerm)ATmakeAppl1(f_VariableList,(ATerm)l));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("GL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_GL"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n printf(\"%s\\n\",getString(t));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("Rule"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Rule"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("RhsGL"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_RhsGL"))),[Variable(Name("v2"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])])]),RhsGL(GL("{\n printf(\"%crule \",'%'); prettyPrint(v1) ; printf(\" %c--> %s\\n\",'%',decapString(v2)) ;\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("Appl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Appl"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Appl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty"))),[])])]),RhsGL(GL("{\n printf(\"%s\",decapString(ATgetArgument((ATermAppl)v1,0)));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("Appl"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Appl"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n printf(\"%s\",decapString(ATgetArgument((ATermAppl)v1,0)));\n printf(\"(\") ;\n while(!ATisEmpty(l)) {\n prettyPrint(ATgetFirst(l)) ;\n l = ATgetNext(l) ;\n if(!ATisEmpty(l)) printf(\",\") ; \n }\n printf(\")\") ;\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("Variable"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Options([]),CodeGL(GL("f_Variable"))),[Variable(Name("name1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("sort1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))])]),RhsGL(GL("{\n printf(\"%s\",decapString(name1));\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrint"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm"))))]),RhsGL(GL("{\n ATprintf(\"Cannot print: %t\\n\",t);\n exit(1);\n}"))),Rule(Appl(SymbolTom(Name("prettyPrintList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty"))),[])]),RhsGL(GL("return;"))),Rule(Appl(SymbolTom(Name("prettyPrintList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Appl(SymbolTom(Name("cons"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_cons"))),[Variable(Name("t"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n prettyPrint(t);\n prettyPrintList(l);\n return;\n}"))),Rule(Appl(SymbolTom(Name("prettyPrintList"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("void"),SortGL(GL("void")))),Options([]),CodeGL(GL("__code_not_given__"))),[Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))]),RhsGL(GL("{\n ATprintf(\"Cannot print list: %l\\n\",l);\n exit(1);\n}"))),Rule(Appl(SymbolTom(Name("sort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_sort"))),[Appl(SymbolTom(Name("empty"),SortsToSort([],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_empty"))),[])]),RhsGL(GL("{\n ATprintf(\"sort: %t\\n\", empty());\n return empty();\n}"))),Rule(Appl(SymbolTom(Name("sort"),SortsToSort([Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_sort"))),[Appl(SymbolTom(Name("cons"),SortsToSort([Sort(SortTom("ATerm"),SortGL(GL("ATerm"))),Sort(SortTom("ATermList"),SortGL(GL("ATermList")))],Sort(SortTom("ATermList"),SortGL(GL("ATermList")))),Options([]),CodeGL(GL("f_cons"))),[Variable(Name("v1"),Sort(SortTom("ATerm"),SortGL(GL("ATerm")))),Variable(Name("l"),Sort(SortTom("ATermList"),SortGL(GL("ATermList"))))])]),RhsGL(GL("{\n ATprintf(\"sort: %t,%t\\n\", v1,l);\n return cons(v1,l);\n}")))]),MainGL(GL("\n\nchar *getString(ATerm t) {\n return ATgetName(ATgetAFun((ATermAppl) t));\n}\n \nchar *decapString(ATerm t) {\n return getString(ATelementAt(ATgetArguments((ATermAppl) t),0)) ;\n}\n\nchar *getSortTom(ATerm sort) {\n return decapString(ATgetArgument((ATermAppl) sort,0));\n}\n\nchar *getSortGL(ATerm sort) {\n return decapString(ATgetArgument((ATermAppl) ATgetArgument((ATermAppl) sort,1),0));\n}\n\nATerm getSymbolRule(ATerm rule) {\n return ATgetArgument((ATermAppl) ATgetArgument((ATermAppl) rule,0),0);\n}\n\nATerm getSymbolName(ATerm symbol) {\n return ATgetArgument((ATermAppl)symbol,0);\n}\n\nATerm getSymbolSort(ATerm symbol) {\n return ATgetArgument((ATermAppl)ATgetArgument((ATermAppl)symbol,1),1);\n}\n\nATerm getSymbolCode(ATerm symbol) {\n return ATgetArgument((ATermAppl)symbol,3);\n}\n\n\nint main(int argc, char **argv) {\n ATerm bottomOfStack;\n \n ATerm t, decGL, mainGL ;\n ATermList decList, ruleList ;\n ATerm v1,v2,v3,v4;\n ATerm compiledTerm;\n \n /* Initialise the ATerm bits & pieces */\n ATinit(argc, argv, &bottomOfStack);\n \n /*\n * Initialisation des AFun\n */\n f_Tom = ATmakeAFun(\"Tom\", 4, ATfalse);\n f_DeclGL = ATmakeAFun(\"DeclGL\", 1, ATfalse);\n f_MainGL = ATmakeAFun(\"MainGL\", 1, ATfalse);\n \n f_DeclListTom = ATmakeAFun(\"DeclListTom\", 1, ATfalse);\n f_RuleListTom = ATmakeAFun(\"RuleListTom\", 1, ATfalse);\n \n f_Rule = ATmakeAFun(\"Rule\", 2, ATfalse);\n f_RhsGL = ATmakeAFun(\"RhsGL\", 1, ATfalse);\n f_SortDecl = ATmakeAFun(\"SortDecl\", 1, ATfalse);\n f_SortsToSort = ATmakeAFun(\"SortsToSort\", 2, ATfalse);\n \n f_GetFunSymDecl = ATmakeAFun(\"GetFunSymDecl\", 2, ATfalse);\n f_GetSubtermDecl = ATmakeAFun(\"GetSubtermDecl\", 3, ATfalse);\n f_TermsEqualDecl = ATmakeAFun(\"TermsEqualDecl\", 3, ATfalse);\n f_VariableDecl = ATmakeAFun(\"VariableDecl\", 1, ATfalse);\n f_Variable = ATmakeAFun(\"Variable\", 2, ATfalse);\n f_GL = ATmakeAFun(\"GL\", 1, ATfalse);\n f_ApiGL = ATmakeAFun(\"ApiGL\", 1, ATfalse);\n f_CodeGL = ATmakeAFun(\"CodeGL\", 1, ATfalse);\n f_SymbolDecl = ATmakeAFun(\"SymbolDecl\", 1, ATfalse);\n f_SymbolTom = ATmakeAFun(\"SymbolTom\", 4, ATfalse);\n f_Appl = ATmakeAFun(\"Appl\", 2, ATfalse);\n \n f_empty = ATmakeAFun(\"empty\", 0, ATfalse);\n f_cons = ATmakeAFun(\"cons\", 2, ATfalse);\n f_sort = ATmakeAFun(\"sort\", 1, ATfalse);\n\n /*\n * Goal Language\n */ \n f_TomGL = ATmakeAFun(\"TomGL\", 4, ATfalse);\n f_RuleSortedListTom = ATmakeAFun(\"RuleSortedListTom\", 2, ATfalse);\n f_RuleSetGL = ATmakeAFun(\"RuleSetGL\", 3, ATfalse);\n f_VariableList = ATmakeAFun(\"VariableList\", 1, ATfalse);\n f_IfThenElseGL = ATmakeAFun(\"IfThenElseGL\", 3, ATfalse);\n \n t = ATreadFromNamedFile(argv[1]); \n if (t==NULL) ATerror(\"error opening file %s.\\n\",argv[1]);\n\n compiledTerm = compile(t);\n\n //ATprintf(\"*** compiledTerm =\\n%t\\n\",compiledTerm);\n prettyPrint(compiledTerm);\n return(0);\n}\n\nATermList genOneToOneMatching(ATermList result, ATerm lhs, ATerm rhs, char *path,\n int nextlab, int deep) {\n int i,j;\n char *pbase;\n struct funSym *sfs;\n char s[1024];\n ATerm symbol, subterm;\n ATermList args; // = ATgetArguments((ATermAppl) term);\n ATerm subtermSymbol, subtermName, subtermSort, subtermOption, subtermCode;\n ATermList subtermArgs, subtermSortList;\n static int semActionGenerated;\n int indexSubterm = 0;\n \n semActionGenerated = 0;\n pbase = strchr(path, 0);\n\n ATmatch(lhs,\"Appl(,[])\",&symbol,&args);\n\n //ATprintf(\"term = %t\\n\",term);\n //ATprintf(\"symb = %t\\n\",symbol);\n //ATprintf(\"args = %l\\n\",args);\n\n while(!ATisEmpty(args)) {\n ATerm name,sort;\n\n subterm = ATgetFirst(args);\n indexSubterm++;\n\n //ATprintf(\"subterm = %t\\n\",subterm);\n \n sprintf(pbase,\"_%d\",indexSubterm);\n if(ATmatch(subterm,\"Variable(,)\",&name, &sort)) {\n sprintf(s,\"%*s %s = %s;\", deep*2,\"\",decapString(name), path);\n result = ATappend(result,ATmake(\"GL()\",s));\n \n //printf(\" %s = %s;\\n\", decapString(name), path);\n /*\n if(sfs->nonlinearityCheckFlag == s_patternCount) {\n // non-linear variable\n fprintf(ggOut, \"%*s\", deep*2,\"\");\n fprintf(ggOut, \" if (!(TERMS_EQUAL_%s(%s, %s))) goto lab%d;\\n\", \n multiStructTypeSuffix(sfs->restype),\n path, sfs->name,nextlab);\n } else {\n fprintf(ggOut, \"%*s\", deep*2,\"\");\n fprintf(ggOut, \" %s = %s;\\n\", sfs->name, path);\n sfs->nonlinearityCheckFlag = s_patternCount;\n }\n */\n// } else if(ATmatch(subterm,\"Appl(,[])\",&subtermSymbol,&subtermArgs)) {\n\n } else if(ATmatch(subterm,\n \"Appl(SymbolTom(,SortsToSort([],),,CodeGL()),[])\",\n &subtermName, &subtermSortList, &subtermSort,\n &subtermOption, &subtermCode, &subtermArgs)) {\n \n int indexSubSubterm = 0;\n\n //ATprintf(\"subtermName = %t\\n\",subtermName);\n //ATprintf(\"subtermSort = %t\\n\",subtermSort);\n //ATprintf(\"subtermCode = %t\\n\",subtermCode);\n //ATprintf(\"subtermArgs = %t\\n\",subtermArgs);\n \n sprintf(s,\"%*s if(GET_FUN_SYM_%s(%s) != %s) goto lab%d;\", deep*2,\"\",\n getSortTom(subtermSort),\n path,\n decapString(subtermCode),\n nextlab);\n result = ATappend(result,ATmake(\"GL()\",s));\n \n sprintf(s,\"%*s {\", deep*2,\"\");\n result = ATappend(result,ATmake(\"GL()\",s));\n\n while(!ATisEmpty(subtermArgs)) {\n ATerm subSubterm = ATgetFirst(subtermArgs);\n ATerm subSubtermSymbol, subSubtermSort, subSubtermName;\n ATermList subSubtermArgs;\n\n //ATprintf(\"*** subSubterm = %t\\n\",subSubterm);\n \n if(ATmatch(subSubterm,\"Appl(,[])\",\n &subSubtermSymbol, &subSubtermArgs)) {\n subSubtermSort = getSymbolSort(subSubtermSymbol);\n } else if(ATmatch(subSubterm,\"Variable(,)\",\n &subSubtermName, &subSubtermSort)) { \n // do nothing\n }\n \n indexSubSubterm++;\n \n sprintf(s,\"%*s %s %s_%d = (%s) GET_SUBTERM_%s(%s,%d);\", deep*2,\"\",\n getSortGL(subSubtermSort),\n path,\n indexSubSubterm, \n getSortGL(subSubtermSort),\n getSortTom(subtermSort),\n path,\n indexSubSubterm-1);\n result = ATappend(result,ATmake(\"GL()\",s));\n subtermArgs = ATgetNext(subtermArgs);\n }\n result = genOneToOneMatching(result,subterm, rhs, path, nextlab, deep+1);\n\n /*\n if(!semActionGenerated) {\n semActionGenerated = 1;\n sprintf(s,\"%*s %s\",deep*2,\"\",decapString(rhs));\n result = ATappend(result,ATmake(\"GL()\",s));\n }\n */\n sprintf(s,\"%*s }\", deep*2,\"\");\n result = ATappend(result,ATmake(\"GL()\",s));\n }\n args = ATgetNext(args);\n }\n //ATprintf(\"*** result = %l\\n\",result);\n return result;\n}\n\n")))