diff --git a/ExampleCodes/1-Variables.fig b/ExampleCodes/1-Variables.fig new file mode 100644 index 0000000..260183e --- /dev/null +++ b/ExampleCodes/1-Variables.fig @@ -0,0 +1,13 @@ +var any_var; // type is Any +var number = 10; // type is Int +number = "123"; // valid + +var number2 := 10; // specific type is Int +var number3: Int = 10; // both is ok +/* +number2 = 3.14; +invalid! +*/ + +const Pi := 3.14; // recommended, auto detect type +// equal -> const Pi: Double = 3.14; \ No newline at end of file diff --git a/Tools/SpeedTest/fib.fig b/ExampleCodes/SpeedTest/fib.fig similarity index 100% rename from Tools/SpeedTest/fib.fig rename to ExampleCodes/SpeedTest/fib.fig diff --git a/Tools/SpeedTest/fib.py b/ExampleCodes/SpeedTest/fib.py similarity index 100% rename from Tools/SpeedTest/fib.py rename to ExampleCodes/SpeedTest/fib.py diff --git a/Tools/SpeedTest/fibLoopTest.fig b/ExampleCodes/SpeedTest/fibLoopTest.fig similarity index 100% rename from Tools/SpeedTest/fibLoopTest.fig rename to ExampleCodes/SpeedTest/fibLoopTest.fig diff --git a/Tools/VscodeExtension/fig-languague-syntax/.vscodeignore b/VscodeExtension/fig-languague-syntax/.vscodeignore similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/.vscodeignore rename to VscodeExtension/fig-languague-syntax/.vscodeignore diff --git a/Tools/VscodeExtension/fig-languague-syntax/CHANGELOG.md b/VscodeExtension/fig-languague-syntax/CHANGELOG.md similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/CHANGELOG.md rename to VscodeExtension/fig-languague-syntax/CHANGELOG.md diff --git a/Tools/VscodeExtension/fig-languague-syntax/LICENSE.md b/VscodeExtension/fig-languague-syntax/LICENSE.md similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/LICENSE.md rename to VscodeExtension/fig-languague-syntax/LICENSE.md diff --git a/Tools/VscodeExtension/fig-languague-syntax/README.md b/VscodeExtension/fig-languague-syntax/README.md similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/README.md rename to VscodeExtension/fig-languague-syntax/README.md diff --git a/Tools/VscodeExtension/fig-languague-syntax/fig-languague-syntax-0.0.1.vsix b/VscodeExtension/fig-languague-syntax/fig-languague-syntax-0.0.1.vsix similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/fig-languague-syntax-0.0.1.vsix rename to VscodeExtension/fig-languague-syntax/fig-languague-syntax-0.0.1.vsix diff --git a/Tools/VscodeExtension/fig-languague-syntax/language-configuration.json b/VscodeExtension/fig-languague-syntax/language-configuration.json similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/language-configuration.json rename to VscodeExtension/fig-languague-syntax/language-configuration.json diff --git a/Tools/VscodeExtension/fig-languague-syntax/package.json b/VscodeExtension/fig-languague-syntax/package.json similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/package.json rename to VscodeExtension/fig-languague-syntax/package.json diff --git a/Tools/VscodeExtension/fig-languague-syntax/syntaxes/fig.tmLanguage.json b/VscodeExtension/fig-languague-syntax/syntaxes/fig.tmLanguage.json similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/syntaxes/fig.tmLanguage.json rename to VscodeExtension/fig-languague-syntax/syntaxes/fig.tmLanguage.json diff --git a/Tools/VscodeExtension/fig-languague-syntax/vsc-extension-quickstart.md b/VscodeExtension/fig-languague-syntax/vsc-extension-quickstart.md similarity index 100% rename from Tools/VscodeExtension/fig-languague-syntax/vsc-extension-quickstart.md rename to VscodeExtension/fig-languague-syntax/vsc-extension-quickstart.md diff --git a/src/lexer.cpp b/src/lexer.cpp index 5c7dd5f..a3c2c64 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -409,31 +409,39 @@ namespace Fig // entry: when iterator current char is '/' and peek is '/' or '*' // current char is '/' FString comment; - if (it.peek() == U'/') + + if (it.peek() == U'/') // single-line comment { - next(); - next(); + next(); // skip first '/' + next(); // skip second '/' + UTF8Char c = *it; while (c != U'\n' and hasNext()) { comment += c.getString(); next(); + c = *it; + } + + if (hasNext() && c == U'\n') + { + next(); } - next(); } - else + else // multi-line comment { - next(); - next(); + next(); // skip '/' + next(); // skip '*' + UTF8Char c = *it; bool terminated = false; + while (hasNext()) { if (c == U'*' and hasNext() and it.peek() == U'/') { next(); // skip '*' next(); // skip '/' - next(); // to next char terminated = true; break; } @@ -441,8 +449,10 @@ namespace Fig { comment += c.getString(); next(); + c = *it; } } + if (!terminated) { error = SyntaxError(FStringView(u8"Unterminated multiline comment"), this->line, it.column()); @@ -450,6 +460,7 @@ namespace Fig return IllegalTok; } } + return Token(comment, TokenType::Comments); } Token Lexer::nextToken() @@ -470,6 +481,24 @@ namespace Fig } last_line = getCurrentLine(); last_column = getCurrentColumn(); + if (ch == U'/') + { + UTF8Char c{u8""}; + if (!hasNext()) + { + next(); + // return Token(u8"/", this->symbol_map.at(u8"/")).setPos(last_line, last_column); + } + c = it.peek(); + if (c != U'/' and c != U'*') + { + next(); + // return Token(u8"/", this->symbol_map.at(u8"/")).setPos(last_line, last_column); + } + scanComments().setPos(last_line, last_column); + return nextToken(); + // now we ignore comments to avoid some stupid bugs + } if (ch == U'r' and hasNext() and it.peek() == U'"') { // r"" @@ -491,22 +520,6 @@ namespace Fig { return scanNumber().setPos(last_line, last_column); } - else if (ch == U'/') - { - UTF8Char c{u8""}; - if (!hasNext()) - { - next(); - return Token(u8"/", this->symbol_map.at(u8"/")).setPos(last_line, last_column); - } - c = it.peek(); - if (c != U'/' and c != U'*') - { - next(); - return Token(u8"/", this->symbol_map.at(u8"/")).setPos(last_line, last_column); - } - return scanComments().setPos(last_line, last_column); - } else if (ch.isPunct()) { return scanSymbol().setPos(last_line, last_column); diff --git a/src/main.cpp b/src/main.cpp index 529ccb4..3fb1f49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -109,6 +109,13 @@ int main(int argc, char **argv) file.close(); Fig::Lexer lexer((Fig::FString(source))); + + // Token tok; + // while ((tok = lexer.nextToken()).getType() != TokenType::EndOfFile) + // { + // std::println("{}", tok.toString().toBasicString()); + // } + Fig::Parser parser(lexer); std::vector ast; @@ -136,12 +143,6 @@ int main(int argc, char **argv) return 1; } - // Token tok; - // while ((tok = lexer.nextToken()).getType() != TokenType::EndOfFile) - // { - // std::println("{}", tok.toString().toBasicString()); - // } - // AstPrinter printer; // std::print(" AST:\n"); // for (const auto &node : ast)