Init, basic tokenizer setup.

This commit is contained in:
Marvin Blum
2015-09-21 13:26:17 +02:00
commit 651c7451d1
9 changed files with 108 additions and 0 deletions

17
.project Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>asl</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.googlecode.goclipse.goBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.googlecode.goclipse.core.goNature</nature>
</natures>
</projectDescription>

10
README.md Normal file
View File

@@ -0,0 +1,10 @@
# ASL
ASL stands for Arma Scripting Language, which is a language compiled to SQF.
This scripting language tries to simplify Arma mod development and eliminate the pain of bad syntax using SQF.
## Syntax
```
...
```

BIN
bin/asl Executable file

Binary file not shown.

BIN
bin/main Executable file

Binary file not shown.

2
in/simple.asl Normal file
View File

@@ -0,0 +1,2 @@
var a = 1;
var b = 2;

BIN
pkg/linux_amd64/asl.a Normal file

Binary file not shown.

7
src/asl/parser.go Normal file
View File

@@ -0,0 +1,7 @@
package asl
import (
)

60
src/asl/tokenizer.go Normal file
View File

@@ -0,0 +1,60 @@
package asl
import (
"fmt"
)
type Token struct{
token string
}
var delimiter = []byte{'=', ';'}
var keywords = []string{"var"}
var whitespace = []byte{' ', '\n', '\t'}
func Tokenize(code []byte) []Token {
tokens := make([]Token, 0)
token := ""
for i := range code {
c := code[i]
if byteArrayContains(delimiter, c) {
tokens = append(tokens, Token{token})
tokens = append(tokens, Token{string(c)})
token = ""
} else if stringArrayContains(keywords, token) {
tokens = append(tokens, Token{token})
token = ""
} else if !byteArrayContains(whitespace, c) {
token += string(c)
}
}
// TEST
for i := range tokens {
fmt.Println(tokens[i].token)
}
return tokens
}
func byteArrayContains(haystack []byte, needle byte) bool {
for i := range haystack {
if haystack[i] == needle {
return true;
}
}
return false
}
func stringArrayContains(haystack []string, needle string) bool {
for i := range haystack {
if haystack[i] == needle {
return true;
}
}
return false
}

12
src/main/asl.go Normal file
View File

@@ -0,0 +1,12 @@
package main
import (
"io/ioutil"
"asl"
)
func main(){
// read test file
code, _ := ioutil.ReadFile("in/simple.asl")
asl.Tokenize(code)
}