Add assembler binary

This commit is contained in:
lash 2023-04-05 08:38:07 +01:00
parent 19d8c66afe
commit aab804e8ff
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
3 changed files with 40 additions and 2 deletions

View File

@ -104,7 +104,7 @@ var (
asmLexer = lexer.MustSimple([]lexer.SimpleRule{
{"Comment", `(?:#)[^\n]*\n?`},
{"Ident", `^[A-Z]+`},
{"Sym", `[a-zA-Z]+`},
{"Sym", `[a-zA-Z0-9_]+`},
{"Size", `[0-9]+`},
{"Whitespace", `[ \t\n\r]+`},
{"Quote", `["']`},
@ -315,8 +315,11 @@ func parseNoarg(op vm.Opcode, arg Arg, w io.Writer) (int, error) {
func Parse(s string, w io.Writer) (int, error) {
rd := strings.NewReader(s)
ast, err := asmParser.Parse("file", rd)
var rn int
if err != nil {
return 0, err
}
var rn int
for _, v := range ast.Instructions {
op := vm.OpcodeIndex[v.OpCode]
n, err := parseSized(op, v.OpArg, w)

28
go/dev/asm/asm.go Normal file
View File

@ -0,0 +1,28 @@
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"git.defalsify.org/festive/asm"
)
func main() {
if (len(os.Args) < 2) {
os.Exit(1)
}
fp := os.Args[1]
v, err := ioutil.ReadFile(fp)
if err != nil {
fmt.Fprintf(os.Stderr, "read error: %v", err)
os.Exit(1)
}
n, err := asm.Parse(string(v), os.Stdout)
if err != nil {
fmt.Fprintf(os.Stderr, "parse error: %v", err)
os.Exit(1)
}
log.Printf("parsed total %v bytes", n)
}

7
go/testdata/foo.fst vendored Normal file
View File

@ -0,0 +1,7 @@
MOUT 0 "to foo"
MOUT 1 "go bar"
LOAD inky 20
HALT
INCMP 0 _
INCMP 1 baz
CATCH _catch 1 1