interface command impl.
This commit is contained in:
parent
9bded21e50
commit
30c2693812
1 changed files with 18 additions and 7 deletions
|
|
@ -7,8 +7,13 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ukaz interface {
|
||||||
|
Temp()
|
||||||
|
}
|
||||||
|
|
||||||
type ukaz struct {
|
func (f format_F1) Temp() {}
|
||||||
|
|
||||||
|
type format_F1 struct {
|
||||||
opcode int
|
opcode int
|
||||||
st_operandov int
|
st_operandov int
|
||||||
format int // F1 - 1, F2 - 2, F3 - 3, F4 - 4, SIC - 5
|
format int // F1 - 1, F2 - 2, F3 - 3, F4 - 4, SIC - 5
|
||||||
|
|
@ -74,7 +79,7 @@ var ukazna_tabela = map[string]int{
|
||||||
"TIO": 0xF8,
|
"TIO": 0xF8,
|
||||||
"TIX": 0x2C,
|
"TIX": 0x2C,
|
||||||
"TIXR": 0xB8,
|
"TIXR": 0xB8,
|
||||||
"WD": 0xDC
|
"WD": 0xDC,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pregledovalnik bere vhodne vrstice in jih razgradi na posamezne enote.
|
// Pregledovalnik bere vhodne vrstice in jih razgradi na posamezne enote.
|
||||||
|
|
@ -84,7 +89,7 @@ var ukazna_tabela = map[string]int{
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
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")
|
inputbyte, err := os.ReadFile("input_invalid.asm")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -94,7 +99,7 @@ func main() {
|
||||||
input := string(inputbyte)
|
input := string(inputbyte)
|
||||||
pattern := regexp.MustCompile(`.*\n`)
|
pattern := regexp.MustCompile(`.*\n`)
|
||||||
matches := pattern.FindAllString(input, -1)
|
matches := pattern.FindAllString(input, -1)
|
||||||
//var AST []ukaz
|
var AST []ukaz
|
||||||
for _, el := range matches {
|
for _, el := range matches {
|
||||||
match_pure_comment, err := regexp.MatchString(`(?m)^[\t ]*\..*$\n`, el)
|
match_pure_comment, err := regexp.MatchString(`(?m)^[\t ]*\..*$\n`, el)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -115,14 +120,20 @@ func main() {
|
||||||
fmt.Println("Error while matching string.")
|
fmt.Println("Error while matching string.")
|
||||||
}
|
}
|
||||||
if match_F1 {
|
if match_F1 {
|
||||||
var nov_ukaz ukaz
|
var nov_ukaz format_F1
|
||||||
nov_ukaz.format = 1
|
nov_ukaz.format = 1
|
||||||
nov_ukaz.st_operandov = 0
|
nov_ukaz.st_operandov = 0
|
||||||
nov_ukaz.velikost = 1
|
nov_ukaz.velikost = 1
|
||||||
pattern := regexp.MustCompile(`[\t ]+[A-Za-z]+`)
|
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];
|
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.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue