basic parsing done
This commit is contained in:
parent
1055ccd52f
commit
47f6a2ae5d
3 changed files with 76 additions and 25 deletions
|
|
@ -1,33 +1,26 @@
|
||||||
arithr START 0 .komentar1
|
arithr START 0 .komentar1
|
||||||
LDX #10
|
LDX #10
|
||||||
SHIFTR A, 10, X
|
SHIFTR A, 10, X
|
||||||
LDS #11 .komentar2
|
LDS #11 .komentar2
|
||||||
LDT #5
|
LDT #5
|
||||||
NOBASE .koment
|
|
||||||
NOBASE
|
|
||||||
BASE ZERO .KOMENTAR
|
|
||||||
ORG tab-tab
|
|
||||||
LAB NOBASE
|
|
||||||
EQU
|
|
||||||
LAB NOBASE .koment
|
|
||||||
.komentar3
|
.komentar3
|
||||||
LDA ZERO
|
LDA ZERO
|
||||||
ADDR S, A
|
ADDR S, A
|
||||||
ADDR T, A
|
ADDR T, A
|
||||||
STA sum
|
STA sum
|
||||||
|
|
||||||
.komentar4
|
.komentar4
|
||||||
LDA ZERO
|
LDA ZERO
|
||||||
ADDR S, A
|
ADDR S, A
|
||||||
SUBR T, A
|
SUBR T, A
|
||||||
STA diff
|
STA diff
|
||||||
|
|
||||||
LDA ZERO
|
LDA ZERO
|
||||||
ADDR S, A
|
ADDR S, A
|
||||||
MULR T, A
|
MULR T, A
|
||||||
STA prod
|
STA prod
|
||||||
|
|
||||||
LDA ZERO
|
LDA ZERO
|
||||||
ADDR S, A
|
ADDR S, A
|
||||||
DIVR T, A
|
DIVR T, A
|
||||||
STA quot
|
STA quot
|
||||||
|
|
@ -38,15 +31,17 @@ LOOP SUBR T, A .komentar5
|
||||||
COMPR A, T
|
COMPR A, T
|
||||||
JGT LOOP
|
JGT LOOP
|
||||||
JEQ LOOP
|
JEQ LOOP
|
||||||
STA mod
|
STA mod
|
||||||
HALT J HALT
|
HALT J HALT
|
||||||
END arithr
|
END arithr
|
||||||
|
|
||||||
ZERO WORD 0
|
ZERO WORD 0
|
||||||
|
one BYTE 123 .KOMETA R
|
||||||
sum RESW 1
|
sum RESW 1
|
||||||
diff RESW 1
|
diff RESW 1
|
||||||
prod RESW 1
|
prod RESW 1
|
||||||
quot RESW 1 .komentar6
|
quot RESW 1 .komentar6
|
||||||
mod RESW 1
|
mod RESW 1
|
||||||
|
WORD 400 . WER
|
||||||
.komentar7
|
.komentar7
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ukazna_tabela = map[string]int{
|
var ukazna_tabela = map[string]int{
|
||||||
|
|
@ -177,6 +178,7 @@ type format_M_r struct {
|
||||||
format int // 8
|
format int // 8
|
||||||
velikost int
|
velikost int
|
||||||
operand string
|
operand string
|
||||||
|
rezervacija int
|
||||||
}
|
}
|
||||||
|
|
||||||
type format_M_i struct {
|
type format_M_i struct {
|
||||||
|
|
@ -185,6 +187,7 @@ type format_M_i struct {
|
||||||
format int // 9
|
format int // 9
|
||||||
velikost int
|
velikost int
|
||||||
operand string
|
operand string
|
||||||
|
rezervacija int
|
||||||
}
|
}
|
||||||
|
|
||||||
func remove_comments_and_empty_lines(el string) bool {
|
func remove_comments_and_empty_lines(el string) bool {
|
||||||
|
|
@ -522,11 +525,60 @@ func check_M_r(el string, AST *[]ukaz) bool {
|
||||||
fmt.Println("Error while matching string.")
|
fmt.Println("Error while matching string.")
|
||||||
}
|
}
|
||||||
if match_M_r {
|
if match_M_r {
|
||||||
var nova_direktiva format_D_n
|
var nova_direktiva format_M_r
|
||||||
re_ime := regexp.MustCompile(`RESW|RESB`)
|
re_ime := regexp.MustCompile(`RESW|RESB`)
|
||||||
nova_direktiva.ime = re_ime.FindString(el)
|
nova_direktiva.ime = re_ime.FindString(el)
|
||||||
nova_direktiva.format = 8
|
nova_direktiva.format = 8
|
||||||
//predpostavi celostevilski operand in doloci velikost
|
nova_direktiva.velikost = 0
|
||||||
|
if !(strings.HasPrefix(el, " ") || strings.HasPrefix(el, "\t")) {
|
||||||
|
re := regexp.MustCompile(`(?m)^[A-Za-z]+`)
|
||||||
|
nova_direktiva.oznaka = re.FindString(el)
|
||||||
|
} else {
|
||||||
|
nova_direktiva.oznaka = ""
|
||||||
|
}
|
||||||
|
re_ope := regexp.MustCompile(`[0-9]+`)
|
||||||
|
nova_direktiva.operand = re_ope.FindString(el)
|
||||||
|
operand_int, _ := strconv.Atoi(nova_direktiva.operand)
|
||||||
|
if nova_direktiva.ime == "RESW" {
|
||||||
|
nova_direktiva.rezervacija = 3 * operand_int
|
||||||
|
} else {
|
||||||
|
nova_direktiva.rezervacija = operand_int
|
||||||
|
}
|
||||||
|
//fmt.Println(el, nova_direktiva)
|
||||||
|
*AST = append(*AST, nova_direktiva)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func check_M_i(el string, AST *[]ukaz) bool {
|
||||||
|
match_M_i, err := regexp.MatchString(`(?m)^[A-Za-z]*[\t ]+(WORD|BYTE) ([0-9]+)[\t ]*(\..*)?$\n`, el)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error while matching string.")
|
||||||
|
}
|
||||||
|
if match_M_i {
|
||||||
|
var nova_direktiva format_M_i
|
||||||
|
re_ime := regexp.MustCompile(`WORD|BYTE`)
|
||||||
|
nova_direktiva.ime = re_ime.FindString(el)
|
||||||
|
nova_direktiva.format = 9
|
||||||
|
if !(strings.HasPrefix(el, " ") || strings.HasPrefix(el, "\t")) {
|
||||||
|
re := regexp.MustCompile(`(?m)^[A-Za-z]+`)
|
||||||
|
nova_direktiva.oznaka = re.FindString(el)
|
||||||
|
} else {
|
||||||
|
nova_direktiva.oznaka = ""
|
||||||
|
}
|
||||||
|
re_ope := regexp.MustCompile(`[0-9]+`)
|
||||||
|
nova_direktiva.operand = re_ope.FindString(el)
|
||||||
|
operand_int, _ := strconv.Atoi(nova_direktiva.operand)
|
||||||
|
if nova_direktiva.ime == "WORD" {
|
||||||
|
nova_direktiva.velikost = 3
|
||||||
|
nova_direktiva.rezervacija = 3 * operand_int
|
||||||
|
} else {
|
||||||
|
nova_direktiva.velikost = 1
|
||||||
|
nova_direktiva.rezervacija = operand_int
|
||||||
|
}
|
||||||
|
fmt.Println(el, nova_direktiva)
|
||||||
|
*AST = append(*AST, nova_direktiva)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
@ -560,6 +612,9 @@ func main() {
|
||||||
if check_M_r(el, &AST) {
|
if check_M_r(el, &AST) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if check_M_i(el, &AST) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if check_F1(el, &AST) {
|
if check_F1(el, &AST) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -586,3 +641,5 @@ func main() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,12 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
ut := make(map[string]int)
|
test := "30"
|
||||||
ut["nov"] = 300
|
var i int
|
||||||
val, ok := ut["nov"]
|
i, _ = strconv.Atoi(test)
|
||||||
fmt.Println(val, ok)
|
fmt.Println(i)
|
||||||
val2, ok2 := ut["nova"]
|
|
||||||
fmt.Println(val2, ok2)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue