Updated README, strings can now contain comments.

This commit is contained in:
Marvin Blum
2015-10-09 11:48:09 +02:00
parent 2bc92c2970
commit 7c4e3c1077
3 changed files with 51 additions and 13 deletions

View File

@@ -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

View File

@@ -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";

View File

@@ -103,11 +103,22 @@ 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]
// 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
@@ -115,9 +126,11 @@ func removeComments(code []byte) []byte {
i = skipMultiLineComment(code, i+1)
continue
}
}
newcode[j] = c
j++
mask = false
}
return newcode[:j]