/* Program to Translate PTN form to compiler form */ -exports("demassage") demassage(mod,ps,ms,done) { ? ps ?= [{{":",_,nm},_,program(args,muts,block)}|ps1] -> { ; demass_head(nm,args,A,A,head), demass_muts(muts,muts1), /* no need to pass mod, as there will be no inter-module calls after the transformer */ demass_block(block,block1), ms=[{"pcn",head,muts1,block1}|ms1], demassage(mod,ps1,ms1,done) }, /* there will be no directives coming from the transformer */ ps ?= [{{":",m,nm},_,[]}|ps1] -> {|| /* stdio:printf(" Deleted: %s:%s\n",{m,nm},_), */ demassage(mod,ps1,ms,done) }, /* ps ?= [] -> {|| ms=[], done=[]}, */ default -> {|| ms=[], done=[]} } demass_head(name,args,Ab,Am,head) { ? args ?= [{_,v,_}|as1] -> { ; Am=[v|Ae], demass_head(name,as1,Ab,Ae,head) }, args ?= [] -> {|| Am=[], sys:list_to_tuple([name|Ab],head) } } demass_muts(muts,vmuts) { ? muts ?= [{type,{_,var,dim}}|ms] -> { ; vmuts=[{type,var,dim}|vs], demass_muts(ms,vs) }, muts ?= [] -> {; vmuts=[] } } demass_block(block,block1) /* block is already in canonic form */ { ? block ?= block(op,blocks) -> {|| blocks(blocks,blocks1), block1 = {op,blocks1} }, block ?= {"->",G,B} -> { ; demass_block(B,B1), blocks(G,G1), block1 = {"->",G1,B1} }, #ifdef TARGET1 block ?= call(id,args,[]), id ?= {_,_,name} -> /* same module call only */ {; sys:list_to_tuple([name|args], block1) }, #else /* TARGET1 */ block ?= call(id,args,[]), id ?= {":",mod,name} -> /* same module call only */ {; sys:list_to_tuple([name|args], C), block1 = {":", mod, C} }, #endif /* TARGET1 */ block ?= prim(name,args) -> {; sys:list_to_tuple([name|args],block1) }, default -> {; block1 = block } } blocks(blocks,blocks1) { ? blocks ?=[B|Bs] -> { ; demass_block(B,B1), blocks1 = [B1|Bs1], blocks(Bs,Bs1) }, blocks ?= [] -> {; blocks1 = [] }, blocks == "default" -> {; blocks1 = blocks } }