mirror of
https://github.com/Kugelschieber/asl.git
synced 2026-01-18 12:00:25 +00:00
Build in functions.
This commit is contained in:
@@ -31,9 +31,15 @@ func parseBlock() {
|
||||
parseForeach()
|
||||
} else if accept("func") {
|
||||
parseFunction()
|
||||
} else if accept("return") {
|
||||
parseReturn()
|
||||
} else {
|
||||
parseStatement()
|
||||
}
|
||||
|
||||
if !end() && !accept("}") {
|
||||
parseBlock()
|
||||
}
|
||||
}
|
||||
|
||||
func parseVar() {
|
||||
@@ -192,6 +198,14 @@ func parseFunctionParameter() {
|
||||
}
|
||||
}
|
||||
|
||||
func parseReturn() {
|
||||
expect("return")
|
||||
appendOut("return ")
|
||||
parseExpression(true)
|
||||
expect(";")
|
||||
appendOut(";\n")
|
||||
}
|
||||
|
||||
// Everything that does not start with a keyword.
|
||||
func parseStatement() {
|
||||
// empty block
|
||||
@@ -206,13 +220,17 @@ func parseStatement() {
|
||||
if accept("=") {
|
||||
appendOut(name)
|
||||
parseAssignment()
|
||||
} else if name == "$" {
|
||||
name = get().token
|
||||
next()
|
||||
parseBuildinFunctionCall(name);
|
||||
} else {
|
||||
parseFunctionCall()
|
||||
appendOut(name+";\n")
|
||||
}
|
||||
|
||||
if !end() {
|
||||
parseStatement()
|
||||
parseBlock()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +251,20 @@ func parseFunctionCall() {
|
||||
appendOut("] call ")
|
||||
}
|
||||
|
||||
func parseBuildinFunctionCall(name string) {
|
||||
expect("(")
|
||||
appendOut("[")
|
||||
parseParameter()
|
||||
expect(")")
|
||||
appendOut("] ")
|
||||
expect("(")
|
||||
appendOut(name+" [")
|
||||
parseParameter()
|
||||
expect(")")
|
||||
expect(";")
|
||||
appendOut("];\n")
|
||||
}
|
||||
|
||||
func parseParameter() {
|
||||
for !accept(")") {
|
||||
parseExpression(true)
|
||||
|
||||
@@ -21,7 +21,8 @@ var delimiter = []byte{
|
||||
',',
|
||||
':',
|
||||
'&',
|
||||
'|'}
|
||||
'|',
|
||||
'$'}
|
||||
|
||||
var keywords = []string{
|
||||
"var",
|
||||
@@ -34,7 +35,8 @@ var keywords = []string{
|
||||
"true",
|
||||
"false",
|
||||
"case",
|
||||
"default"}
|
||||
"default",
|
||||
"return"}
|
||||
|
||||
var whitespace = []byte{' ', '\n', '\t'}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
func main(){
|
||||
// read test file
|
||||
code, _ := ioutil.ReadFile("in/statements.asl")
|
||||
code, _ := ioutil.ReadFile("in/simple.asl")
|
||||
token := asl.Tokenize(code)
|
||||
out := asl.Parse(token)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user