interface command impl.

This commit is contained in:
aljazbrodar. 2025-12-30 15:58:00 +01:00
parent 9bded21e50
commit 30c2693812

View file

@ -7,8 +7,13 @@ import (
"strings"
)
type ukaz interface {
Temp()
}
type ukaz struct {
func (f format_F1) Temp() {}
type format_F1 struct {
opcode int
st_operandov int
format int // F1 - 1, F2 - 2, F3 - 3, F4 - 4, SIC - 5
@ -74,7 +79,7 @@ var ukazna_tabela = map[string]int{
"TIO": 0xF8,
"TIX": 0x2C,
"TIXR": 0xB8,
"WD": 0xDC
"WD": 0xDC,
}
// Pregledovalnik bere vhodne vrstice in jih razgradi na posamezne enote.
@ -84,7 +89,7 @@ var ukazna_tabela = map[string]int{
func main() {
//register, _ := regexp.Compile("A|X|L|B|S|T|F")
register = `A|X|L|B|S|T|F`
inputbyte, err := os.ReadFile("input_invalid.asm")
if err != nil {
@ -94,7 +99,7 @@ func main() {
input := string(inputbyte)
pattern := regexp.MustCompile(`.*\n`)
matches := pattern.FindAllString(input, -1)
//var AST []ukaz
var AST []ukaz
for _, el := range matches {
match_pure_comment, err := regexp.MatchString(`(?m)^[\t ]*\..*$\n`, el)
if err != nil {
@ -115,14 +120,20 @@ func main() {
fmt.Println("Error while matching string.")
}
if match_F1 {
var nov_ukaz ukaz
var nov_ukaz format_F1
nov_ukaz.format = 1
nov_ukaz.st_operandov = 0
nov_ukaz.velikost = 1
pattern := regexp.MustCompile(`[\t ]+[A-Za-z]+`)
mnemonik := strings.Trim(re.FindString(el), " \n")
mnemonik := strings.Trim(pattern.FindString(el), " \n")
nov_ukaz.opcode = ukazna_tabela[mnemonik];
fmt.Print(mnemonik)
fmt.Println(mnemonik, nov_ukaz.opcode)
AST = append(AST, nov_ukaz)
continue
}
match_F2, err := regexp.MatchString(`^[A-Za-z_]*[\t ]+[A-Za-z_]+[\t ](((`+register+`), `+register+`)|(`+register+`))[\t ]*(\..*)?$\n`)
if err != nil {
fmt.Println("Error while matching string.")
}
}
}