From 7c4e3c10779b287898673a71397feb6758f5b56d Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Fri, 9 Oct 2015 11:48:09 +0200 Subject: [PATCH] Updated README, strings can now contain comments. --- README.md | 30 ++++++++++++++++++++++++++++-- in/test.asl | 5 ++--- src/asl/tokenizer.go | 29 +++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4cd5f77..5e4d78e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,34 @@ # 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. +ASL stands for Arma Scripting Language, a C-style scripting language compiled to SQF. +ASL is intended to simplify Arma 3 mod and mission development and eliminate the pain of SQF's bad syntax. + +Main reasons for ASL: + +* consistent and clean syntax +* less writing +* easier to read and maintain +* easy to lern and understand +* full replacement of SQF +* compatible with Arma wiki and commands + +The compiler is written in Go and implemented as a simple recursive decent parser and uses concurrency to compile multiple files at once, which makes it really fast. ## Syntax *coming soon* + +## Contribute + +To contribute please create pull requests or explain your ideas in the issue section on GitHub. Report any bugs or incompatible ASL <-> SQF syntax you can find. + +## Further information + +For further information you can read the SQF tutorial and documentation of scripting commands on the Arma wiki. + +* [Arma Wiki](https://community.bistudio.com/wiki/Main_Page) +* [Scripting commands](https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3) + +## License + +MIT diff --git a/in/test.asl b/in/test.asl index aa0ea7e..c21ba9e 100644 --- a/in/test.asl +++ b/in/test.asl @@ -1,3 +1,2 @@ -var _x = "This is a string!"; -var _y = ""; -var _z = "\"mask\""; +var _x = "/* multi line comment */"; +var _y = "// single line comment"; diff --git a/src/asl/tokenizer.go b/src/asl/tokenizer.go index f3358e0..5dce409 100644 --- a/src/asl/tokenizer.go +++ b/src/asl/tokenizer.go @@ -103,21 +103,34 @@ func Tokenize(code []byte) []Token { // multi line comments with /* ... */ (slash star, star slash). func removeComments(code []byte) []byte { newcode := make([]byte, len(code)) - j := 0 + j, mask, isstring := 0, false, false for i := 0; i < len(code); i++ { c := code[i] - - if c == '/' && nextChar(code, i) == '/' { - i = skipSingleLineComment(code, i+1) - continue - } else if c == '/' && nextChar(code, i) == '*' { - i = skipMultiLineComment(code, i+1) - continue + + // do not remove comments from strings + if c == '\\' && !mask { + mask = true } + + if c == '"' && !mask { + isstring = !isstring + } + + // single/multi line comment + if !isstring { + if c == '/' && nextChar(code, i) == '/' { + i = skipSingleLineComment(code, i+1) + continue + } else if c == '/' && nextChar(code, i) == '*' { + i = skipMultiLineComment(code, i+1) + continue + } + } newcode[j] = c j++ + mask = false } return newcode[:j]