38
-define(MFA(M,F,A,N), {atom,N,M}, {':',N}, {atom,N,F}, {'/',N}, {integer,N,A}).
38
-define(MFA(M,F,A,N), {atom,N,M}, {':',_}, {atom,_,F}, {'/',_}, {integer,_,A}).
39
39
-define(MFA2(M,F,A,N),
40
{'{',N},{atom,N,M},{',',N},{atom,N,F},{',',N},{integer,N,A},{'}',N}).
41
-define(DECL(N,T), {':',N},{var,N,T}).
40
{'{',N},{atom,_,M},{',',_},{atom,_,F},{',',_},{integer,_,A},{'}',_}).
41
-define(DECL(N1,N2,T), {':',N1},{var,N2,T}).
43
lex([{atom,N,V1},{'->',N},{atom,N,V2} | L]) ->
44
Constant = {constant, unknown, edge, {V1,V2}},
45
[{edge,N,Constant} | lex(L)];
46
lex([{'{',N},{atom,N,V1},{',',N},{atom,N,V2},{'}',N} | L]) ->
47
Constant = {constant, unknown, edge, {V1,V2}},
48
[{edge,N,Constant} | lex(L)];
49
lex([?MFA(M,F,A,N),{'->',N},?MFA(M2,F2,A2,N) | L]) ->
43
lex([{atom,N,V1},{'->',_},{atom,_,V2} | L]) ->
44
Constant = {constant, unknown, edge, {V1,V2}},
45
[{edge,N,Constant} | lex(L)];
46
lex([{'{',N},{atom,_,V1},{',',_},{atom,_,V2},{'}',_} | L]) ->
47
Constant = {constant, unknown, edge, {V1,V2}},
48
[{edge,N,Constant} | lex(L)];
49
lex([?MFA(M,F,A,N),{'->',_},?MFA(M2,F2,A2,_) | L]) ->
50
50
Constant = {constant, 'Fun', edge, {{M,F,A},{M2,F2,A2}}},
51
51
[{edge,N,Constant} | lex(L)];
52
52
lex([?MFA(M,F,A,N) | L]) ->
53
53
Constant = {constant, 'Fun', vertex, {M,F,A}},
54
54
[{vertex,N,Constant} | lex(L)];
55
lex([{'{',N},?MFA2(M,F,A,N),{',',N},?MFA2(M2,F2,A2,N),{'}',N} | L]) ->
55
lex([{'{',N},?MFA2(M,F,A,_),{',',_},?MFA2(M2,F2,A2,_),{'}',_} | L]) ->
56
56
Constant = {constant, 'Fun', edge, {{M,F,A},{M2,F2,A2}}},
57
57
[{edge,N,Constant} | lex(L)];
58
58
lex([?MFA2(M,F,A,N) | L]) ->
59
59
Constant = {constant, 'Fun', vertex, {M,F,A}},
60
60
[{vertex,N,Constant} | lex(L)];
61
lex([?DECL(N,Decl) | L]) ->
61
lex([?DECL(N1,N2,Decl) | L]) ->
62
62
case is_type(Decl) of
63
false -> [?DECL(N, Decl) | lex(L)];
64
true -> [{decl,N,Decl} | lex(L)]
63
false -> [?DECL(N1, N2, Decl) | lex(L)];
64
true -> [{decl,N1,Decl} | lex(L)]
66
lex([{':',N},{'=',N} | L]) ->
66
lex([{':',N},{'=',_} | L]) ->
67
67
[{':=',N} | lex(L)];
68
lex([{'||',N},{'|',N} | L]) ->
68
lex([{'||',N},{'|',_} | L]) ->
69
69
[{'|||',N} | lex(L)];
70
70
lex([V={var,N,Var} | L]) ->
71
71
T = case is_type(Var) of