File: atomfunc.perl

package info (click to toggle)
klic 3.003-1.1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 7,068 kB
  • ctags: 6,333
  • sloc: ansic: 101,584; makefile: 3,395; sh: 1,321; perl: 312; exp: 131; tcl: 111; asm: 102; lisp: 4; sed: 1
file content (69 lines) | stat: -rw-r--r-- 1,717 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
## ---------------------------------------------------------- 
##   (C)1993,1994,1995 Institute for New Generation Computer Technology 
##       (Read COPYRIGHT for detailed information.) 
##   (C)1996, 1997, 1998, 1999 Japan Information Processing Development Center
##       (Read COPYRIGHT-JIPDEC for detailed information.)
##-----------------------------------------------------------
sub decode {
    local($encode)=@_;
    local($decode);
    for (;;) {
	if ($encode eq "") {
	    $decode =~ s/([\'\\])/\\\1/g;
	    return $decode;
	} elsif ($encode =~ /^([a-zA-Z0-9]+)/) {
	    $decode .= $1;
	    $encode =~ s/^[a-zA-Z0-9]+//;
	} elsif ($encode =~ /^__/) {
	    $decode .= "_";
	    $encode =~ s/^__//;
	} elsif ($encode =~ /^_([0-9A-F]{2})/) {
	    $decode .= sprintf("%c", hex($1));
	    $encode =~ s/^_[0-9A-F]{2}//;
	} else {
	    die;
	}
    }
}
print ":- module main.\n";
$var = "AAA";
while (<>) {
    if (/^atom_(.*)$/) {
	push(@atom, &decode($1));
    } elsif (/^functor_(.*)_(\d+)$/) {
	($2 == 0) && next;
	push(@arity, $2);
	push(@funct, &decode($1));
    }
}
print "main:-\n",
  " X=['",join("',\n\t'", @atom),"'],\n",
  " Y=[\"",join("\",\n\t\"", @atom),"\"],\n";
# make funct

for ($i = 0; $i < @arity; ++$i) {
    @arg = ();
    for ($a = 0; $a < $arity[$i]; ++$a) {
	push(@arg, 0);
    }
    push(@functor, "'$funct[$i]'(".join(",", @arg).")");
}
print
  "	A=[",join(",\n\t", @arity),"],\n",
  "	P=[\'",join("\',\n\t\'", @funct),"\'],\n",
  "	F=[",join(",\n\t", @functor),"],\n",
  " comp(X,Y),\n",
  " comp(F,P,A).\n";


print "
comp([],[]).
comp([A|B],[C|D]) :- atom_table:get_atom_string(A,C), comp(B,D).

comp([],[],[]).
comp([A|B],[C|D],[E|F]) :- functor(A,C,E) | comp(B,D,F).

";