-
Notifications
You must be signed in to change notification settings - Fork 0
/
expression.go
93 lines (85 loc) · 2.18 KB
/
expression.go
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package conv
import (
"github.com/kaisawind/cobol-go/gen/cobol85"
"github.com/kaisawind/cobol-go/pb"
)
func ArithmeticExpression(in cobol85.IArithmeticExpressionContext) (out *pb.ArithmeticExpression) {
ctx := in.(*cobol85.ArithmeticExpressionContext)
out = &pb.ArithmeticExpression{}
if ictx := ctx.MultDivs(); ictx != nil {
out.MultDivs = MultDivs(ictx)
}
for _, v := range ctx.AllPlusMinus() {
out.PlusMinus = append(out.PlusMinus, PlusMinus(v))
}
return
}
func PlusMinus(in cobol85.IPlusMinusContext) (out *pb.PlusMinus) {
ctx := in.(*cobol85.PlusMinusContext)
out = &pb.PlusMinus{}
if ctx.MultDivs() != nil {
out.MultDivs = MultDivs(ctx.MultDivs())
}
return
}
func MultDivs(in cobol85.IMultDivsContext) (out *pb.MultDivs) {
ctx := in.(*cobol85.MultDivsContext)
out = &pb.MultDivs{
Powers: &pb.Powers{},
MultDiv: []*pb.MultDiv{},
}
if ictx := ctx.Powers(); ictx != nil {
out.Powers = Powers(ictx)
}
for _, v := range ctx.AllMultDiv() {
out.MultDiv = append(out.MultDiv, MultDiv(v))
}
return
}
func MultDiv(in cobol85.IMultDivContext) (out *pb.MultDiv) {
ctx := in.(*cobol85.MultDivContext)
out = &pb.MultDiv{
Powers: &pb.Powers{},
}
if ictx := ctx.Powers(); ictx != nil {
out.Powers = Powers(ictx)
}
return
}
func Powers(in cobol85.IPowersContext) (out *pb.Powers) {
ctx := in.(*cobol85.PowersContext)
out = &pb.Powers{}
for _, v := range ctx.AllPower() {
out.Powers = append(out.Powers, Power(v))
}
if ctx.Basis() != nil {
out.Basis = Basis(ctx.Basis())
}
return
}
func Power(in cobol85.IPowerContext) (out *pb.Power) {
ctx := in.(*cobol85.PowerContext)
out = &pb.Power{}
if ctx.Basis() != nil {
out.Basis = Basis(ctx.Basis())
}
return
}
func Basis(in cobol85.IBasisContext) (out *pb.Basis) {
ctx := in.(*cobol85.BasisContext)
out = &pb.Basis{}
if ctx.ArithmeticExpression() != nil {
out.OneOf = &pb.Basis_ArithmeticExpression{
ArithmeticExpression: ArithmeticExpression(ctx.ArithmeticExpression()),
}
} else if ctx.Identifier() != nil {
out.OneOf = &pb.Basis_Identifier{
Identifier: Identifier(ctx.Identifier()),
}
} else if ctx.Literal() != nil {
out.OneOf = &pb.Basis_Literal{
Literal: Literal(ctx.Literal()),
}
}
return
}