ch
This commit is contained in:
parent
ad4eba0796
commit
9bded21e50
3 changed files with 134 additions and 25 deletions
43
ass3/zbirnik/parsing/input_invalid.asm
Normal file
43
ass3/zbirnik/parsing/input_invalid.asm
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
arithr START 0 .komentar1
|
||||||
|
LDS #11 .komentar2
|
||||||
|
LDT #5
|
||||||
|
.komentar3
|
||||||
|
LDA ZERO
|
||||||
|
ADDR S, A
|
||||||
|
ADDR T, A
|
||||||
|
STA sum
|
||||||
|
FIX
|
||||||
|
FLOAT
|
||||||
|
.komentar4
|
||||||
|
LDA ZERO
|
||||||
|
ADDR S, A
|
||||||
|
SUBR T, A
|
||||||
|
STA diff
|
||||||
|
HIO
|
||||||
|
LDA ZERO
|
||||||
|
ADDR S, A
|
||||||
|
MULR T, A
|
||||||
|
STA prod
|
||||||
|
|
||||||
|
LDA ZERO
|
||||||
|
ADDR S, A
|
||||||
|
DIVR T, A
|
||||||
|
STA quot
|
||||||
|
FIX . s komentarjem
|
||||||
|
LDA ZERO
|
||||||
|
ADDR S, A
|
||||||
|
LOOP SUBR T, A .komentar5
|
||||||
|
COMPR A, T
|
||||||
|
JGT LOOP
|
||||||
|
JEQ LOOP
|
||||||
|
STA mod
|
||||||
|
HALT J HALT
|
||||||
|
END arithr
|
||||||
|
|
||||||
|
ZERO WORD 0
|
||||||
|
sum RESW 1
|
||||||
|
diff RESW 1
|
||||||
|
prod RESW 1
|
||||||
|
quot RESW 1 .komentar6
|
||||||
|
mod RESW 1
|
||||||
|
.komentar7
|
||||||
|
|
@ -4,21 +4,89 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
|
||||||
type ukaz struct {
|
type ukaz struct {
|
||||||
opcode int
|
opcode int
|
||||||
st_operandov int
|
st_operandov int
|
||||||
format int
|
format int // F1 - 1, F2 - 2, F3 - 3, F4 - 4, SIC - 5
|
||||||
|
velikost int //v bajtih
|
||||||
}
|
}
|
||||||
|
|
||||||
var ukazna_tabela = map[string]ukaz{
|
var ukazna_tabela = map[string]int{
|
||||||
"LDA":
|
"ADD": 0x18,
|
||||||
}*/
|
"ADDF": 0x58,
|
||||||
|
"ADDR": 0x90,
|
||||||
|
"AND": 0x40,
|
||||||
|
"CLEAR": 0xB4,
|
||||||
|
"COMP": 0x28,
|
||||||
|
"COMPF": 0x88,
|
||||||
|
"COMPR": 0xA0,
|
||||||
|
"DIV": 0x24,
|
||||||
|
"DIVF": 0x64,
|
||||||
|
"DIVR": 0x9C,
|
||||||
|
"FIX": 0xC4,
|
||||||
|
"FLOAT": 0xC0,
|
||||||
|
"HIO": 0xF4,
|
||||||
|
"J": 0x3C,
|
||||||
|
"JEQ": 0x30,
|
||||||
|
"JGT": 0x34,
|
||||||
|
"JLT": 0x38,
|
||||||
|
"JSUB": 0x48,
|
||||||
|
"LDA": 0x00,
|
||||||
|
"LDB": 0x68,
|
||||||
|
"LDCH": 0x50,
|
||||||
|
"LDF": 0x70,
|
||||||
|
"LDL": 0x08,
|
||||||
|
"LDS": 0x6C,
|
||||||
|
"LDT": 0x74,
|
||||||
|
"LDX": 0x04,
|
||||||
|
"LPS": 0xD0,
|
||||||
|
"MUL": 0x20,
|
||||||
|
"MULF": 0x60,
|
||||||
|
"MULR": 0x98,
|
||||||
|
"NORM": 0xC8,
|
||||||
|
"OR": 0x44,
|
||||||
|
"RD": 0xD4,
|
||||||
|
"RMO": 0xAC,
|
||||||
|
"RSUB": 0x4C,
|
||||||
|
"SHIFTL": 0xA4,
|
||||||
|
"SHIFTR": 0xA8,
|
||||||
|
"SIO": 0xF0,
|
||||||
|
"SSK": 0xEC,
|
||||||
|
"STA": 0x0C,
|
||||||
|
"STB": 0x78,
|
||||||
|
"STCH": 0x54,
|
||||||
|
"STF": 0x80,
|
||||||
|
"STI": 0xD4,
|
||||||
|
"STL": 0x14,
|
||||||
|
"STS": 0x74,
|
||||||
|
"STSW": 0xE8,
|
||||||
|
"STT": 0x84,
|
||||||
|
"STX": 0x10,
|
||||||
|
"SUB": 0x1C,
|
||||||
|
"SUBF": 0x5C,
|
||||||
|
"SUBR": 0x94,
|
||||||
|
"SVC": 0xB0,
|
||||||
|
"TD": 0xE0,
|
||||||
|
"TIO": 0xF8,
|
||||||
|
"TIX": 0x2C,
|
||||||
|
"TIXR": 0xB8,
|
||||||
|
"WD": 0xDC
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pregledovalnik bere vhodne vrstice in jih razgradi na posamezne enote.
|
||||||
|
// Razpoznane elemente okvalificira (oznaka / mnemonik / operand / komentar)
|
||||||
|
// //<zbirniski stavek> ::== [<oznaka stavka>] <ločilo> <mnemonik> <ločilo> {<operand> <ločilo>} [<komentar>]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
inputbyte, err := os.ReadFile("input.asm")
|
//register, _ := regexp.Compile("A|X|L|B|S|T|F")
|
||||||
|
|
||||||
|
inputbyte, err := os.ReadFile("input_invalid.asm")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error reading input file: ", err)
|
fmt.Println("Error reading input file: ", err)
|
||||||
return
|
return
|
||||||
|
|
@ -26,7 +94,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 cleared_matches []string
|
//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 {
|
||||||
|
|
@ -42,14 +110,19 @@ func main() {
|
||||||
if match_empty {
|
if match_empty {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
match_command, err := regexp.MatchString(``, el)
|
match_F1, err := regexp.MatchString(`(?m)^[A-Za-z_]*[\t ]+[A-Za-z]+[\t ]*(\..*)?$\n`, el)
|
||||||
fmt.Print(el)
|
if err != nil {
|
||||||
|
fmt.Println("Error while matching string.")
|
||||||
|
}
|
||||||
|
if match_F1 {
|
||||||
|
var nov_ukaz ukaz
|
||||||
|
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")
|
||||||
|
nov_ukaz.opcode = ukazna_tabela[mnemonik];
|
||||||
|
fmt.Print(mnemonik)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//Zbirnik mora opraviti naslednje naloge:
|
|
||||||
//1) Pregledati in razčleniti zbirniški stavek (pregledovalnik)
|
|
||||||
//2) Mnemonike nadomestiti z operacijskimi kodami
|
|
||||||
//3) Simbolična imena nadomestiti z ustreznimi številskimi ekvivalenti
|
|
||||||
//4) Razrešiti simbolične operande
|
|
||||||
//...
|
|
||||||
//<zbirniski stavek> ::== [<oznaka stavka>] <ločilo> <mnemonik> <ločilo> {<operand> <ločilo>} [<komentar>]
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,9 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
pattern := regexp.MustCompile(`o\w*g`)
|
i := 0xB4
|
||||||
fmt.Println(pattern.FindString("oogenesis")) // returns ""
|
fmt.Println(i)
|
||||||
fmt.Println(pattern.FindString("ck")) // returns "ook"
|
|
||||||
fmt.Println(pattern.FindString("oocyst")) // returns ""
|
|
||||||
fmt.Println(pattern.FindString("book")) // returns "ook"}
|
|
||||||
match, what := regexp.MatchString("p([a-z]+)ch", "peach")
|
|
||||||
fmt.Println(match)
|
|
||||||
fmt.Println(what)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue