type switch with pointers
This commit is contained in:
parent
e6b0e22330
commit
504df9b8fd
1 changed files with 53 additions and 53 deletions
|
|
@ -80,17 +80,17 @@ type ukaz interface {
|
|||
GetOznaka() string
|
||||
}
|
||||
|
||||
func (f format_F1) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F2_n) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F2_r) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F2_rn) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F2_rr) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F3_m) GetOznaka() string { return f.oznaka }
|
||||
func (f format_F4_m) GetOznaka() string { return f.oznaka }
|
||||
func (f format_D) GetOznaka() string { return f.oznaka }
|
||||
func (f format_D_n) GetOznaka() string { return f.oznaka }
|
||||
func (f format_M_i) GetOznaka() string { return f.oznaka }
|
||||
func (f format_M_r) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F1) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F2_n) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F2_r) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F2_rn) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F2_rr) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F3_m) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_F4_m) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_D) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_D_n) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_M_i) GetOznaka() string { return f.oznaka }
|
||||
func (f *format_M_r) GetOznaka() string { return f.oznaka }
|
||||
|
||||
var register string = `A|X|L|B|S|T|F`
|
||||
|
||||
|
|
@ -243,7 +243,7 @@ func check_F1(el string, AST *[]ukaz) bool {
|
|||
}
|
||||
nov_ukaz.opcode = val
|
||||
//fmt.Println("F1: ", mnemonik, nov_ukaz.opcode)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -273,7 +273,7 @@ func check_F2_n(el string, AST *[]ukaz) bool {
|
|||
nov_ukaz.n = temp
|
||||
}
|
||||
//fmt.Println("F2_n ", el[:len(el) - 1], nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -304,7 +304,7 @@ func check_F2_r(el string, AST *[]ukaz) bool {
|
|||
re_par := regexp.MustCompile(`[\t ]+[A-Za-z]+ (`+register+`)`)
|
||||
nov_ukaz.r1 = strings.Split(strings.Trim(re_par.FindString(el), "\t \n"), " ")[1]
|
||||
//fmt.Println(nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -342,7 +342,7 @@ func check_F2_rn(el string, AST *[]ukaz) bool {
|
|||
nov_ukaz.n = temp
|
||||
}
|
||||
//fmt.Println("F2_rn: ", el[:len(el) - 1], nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -375,7 +375,7 @@ func check_F2_rr(el string, AST *[]ukaz) bool {
|
|||
re_par2 := regexp.MustCompile(`(`+register+`), (`+register+`)`)
|
||||
nov_ukaz.r2 = strings.Split(re_par2.FindString(el), " ")[1]
|
||||
//fmt.Println("F2_rr: ", nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -428,7 +428,7 @@ func check_F3_m(el string, AST *[]ukaz) bool {
|
|||
}
|
||||
nov_ukaz.e = false
|
||||
//fmt.Println(el, nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -481,7 +481,7 @@ func check_F4_m(el string, AST *[]ukaz) bool {
|
|||
}
|
||||
nov_ukaz.e = true
|
||||
//fmt.Println(el, nov_ukaz)
|
||||
*AST = append(*AST, nov_ukaz)
|
||||
*AST = append(*AST, &nov_ukaz)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -503,7 +503,7 @@ func check_D(el string, AST *[]ukaz) bool {
|
|||
} else {
|
||||
nova_direktiva.oznaka = ""
|
||||
}
|
||||
*AST = append(*AST, nova_direktiva)
|
||||
*AST = append(*AST, &nova_direktiva)
|
||||
//fmt.Println(el, nova_direktiva)
|
||||
return true
|
||||
}
|
||||
|
|
@ -529,7 +529,7 @@ func check_D_n(el string, AST *[]ukaz) bool {
|
|||
}
|
||||
re_ope := regexp.MustCompile(`(START|END|ORG|EQU|BASE) ([A-Za-z\+\-\*]+|[0-9\+\-\*]+)`)
|
||||
nova_direktiva.operand = strings.Split(re_ope.FindString(el), " ")[1]
|
||||
*AST = append(*AST, nova_direktiva)
|
||||
*AST = append(*AST, &nova_direktiva)
|
||||
//fmt.Println(el, nova_direktiva)
|
||||
return true
|
||||
}
|
||||
|
|
@ -562,7 +562,7 @@ func check_M_r(el string, AST *[]ukaz) bool {
|
|||
nova_direktiva.rezervacija = operand_int
|
||||
}
|
||||
//fmt.Println(el, nova_direktiva)
|
||||
*AST = append(*AST, nova_direktiva)
|
||||
*AST = append(*AST, &nova_direktiva)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
@ -595,37 +595,37 @@ func check_M_i(el string, AST *[]ukaz) bool {
|
|||
nova_direktiva.rezervacija = operand_int
|
||||
}
|
||||
//fmt.Println(el, nova_direktiva)
|
||||
*AST = append(*AST, nova_direktiva)
|
||||
*AST = append(*AST, &nova_direktiva)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func prvi_prehod(AST *[]ukaz) {
|
||||
lc_global, _ = strconv.Atoi((*AST)[0].(format_D_n).operand)
|
||||
ime_programa = (*AST)[0].(format_D_n).oznaka
|
||||
lc_global, _ = strconv.Atoi((*AST)[0].(*format_D_n).operand)
|
||||
ime_programa = (*AST)[0].(*format_D_n).oznaka
|
||||
for _, el := range *AST {
|
||||
fmt.Println("lc_global", lc_global)
|
||||
switch val := el.(type) {
|
||||
case format_F1: val.lc = lc_global
|
||||
case *format_F1: val.lc = lc_global
|
||||
lc_global += 1
|
||||
case format_F2_n: val.lc = lc_global
|
||||
case *format_F2_n: val.lc = lc_global
|
||||
lc_global += 2
|
||||
case format_F2_r: val.lc = lc_global
|
||||
case *format_F2_r: val.lc = lc_global
|
||||
lc_global += 2
|
||||
case format_F2_rn: val.lc = lc_global
|
||||
case *format_F2_rn: val.lc = lc_global
|
||||
lc_global += 2
|
||||
case format_F2_rr: val.lc = lc_global
|
||||
case *format_F2_rr: val.lc = lc_global
|
||||
lc_global += 2
|
||||
case format_F3_m: val.lc = lc_global
|
||||
case *format_F3_m: val.lc = lc_global
|
||||
lc_global += 3
|
||||
case format_F4_m: val.lc = lc_global
|
||||
case *format_F4_m: val.lc = lc_global
|
||||
lc_global += 4
|
||||
case format_D: val.lc = lc_global
|
||||
case format_D_n: val.lc = lc_global
|
||||
case format_M_r: val.lc = lc_global
|
||||
case *format_D: val.lc = lc_global
|
||||
case *format_D_n: val.lc = lc_global
|
||||
case *format_M_r: val.lc = lc_global
|
||||
lc_global += val.rezervacija
|
||||
case format_M_i: val.lc = lc_global
|
||||
case *format_M_i: val.lc = lc_global
|
||||
lc_global += val.rezervacija
|
||||
}
|
||||
}
|
||||
|
|
@ -634,17 +634,17 @@ func prvi_prehod(AST *[]ukaz) {
|
|||
func izpis(AST *[]ukaz) {
|
||||
for _, el := range *AST {
|
||||
switch val := el.(type) {
|
||||
case format_F1: fmt.Println("F1", val)
|
||||
case format_F2_n: fmt.Println("F2_n", val)
|
||||
case format_F2_r: fmt.Println("F2_r", val)
|
||||
case format_F2_rn: fmt.Println("F2_rn", val)
|
||||
case format_F2_rr: fmt.Println("F2_rr", val)
|
||||
case format_F3_m: fmt.Println("F3_m", val)
|
||||
case format_F4_m: fmt.Println("F4_m", val)
|
||||
case format_D: fmt.Println("D", val)
|
||||
case format_D_n: fmt.Println("D_n", val)
|
||||
case format_M_r: fmt.Println("M_r", val)
|
||||
case format_M_i: fmt.Println("M_i", val)
|
||||
case *format_F1: fmt.Println("F1", val)
|
||||
case *format_F2_n: fmt.Println("F2_n", val)
|
||||
case *format_F2_r: fmt.Println("F2_r", val)
|
||||
case *format_F2_rn: fmt.Println("F2_rn", val)
|
||||
case *format_F2_rr: fmt.Println("F2_rr", val)
|
||||
case *format_F3_m: fmt.Println("F3_m", val)
|
||||
case *format_F4_m: fmt.Println("F4_m", val)
|
||||
case *format_D: fmt.Println("D", val)
|
||||
case *format_D_n: fmt.Println("D_n", val)
|
||||
case *format_M_r: fmt.Println("M_r", val)
|
||||
case *format_M_i: fmt.Println("M_i", val)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue