languages support (WIP)

This commit is contained in:
MihailRis
2023-12-12 22:02:17 +03:00
parent 0837cf4f03
commit 7bf70bb26e
21 changed files with 456 additions and 38 deletions
+18 -3
View File
@@ -98,6 +98,18 @@ void BasicParser::skipWhitespace() {
}
}
void BasicParser::skipLine() {
while (hasNext()) {
if (source[pos] == '\n') {
pos++;
linestart = pos;
line++;
break;
}
pos++;
}
}
bool BasicParser::hasNext() {
return pos < source.length();
}
@@ -250,7 +262,7 @@ bool BasicParser::parseNumber(int sign, number_u& out) {
return true;
}
string BasicParser::parseString(char quote) {
string BasicParser::parseString(char quote, bool closeRequired) {
std::stringstream ss;
while (hasNext()) {
char c = source[pos];
@@ -282,13 +294,16 @@ string BasicParser::parseString(char quote) {
}
continue;
}
if (c == '\n') {
if (c == '\n' && closeRequired) {
throw error("non-closed string literal");
}
ss << c;
pos++;
}
throw error("unexpected end");
if (closeRequired) {
throw error("unexpected end");
}
return ss.str();
}
parsing_error BasicParser::error(std::string message) {
+2 -1
View File
@@ -70,6 +70,7 @@ protected:
uint linestart = 0;
virtual void skipWhitespace();
void skipLine();
void expect(char expected);
char peek();
char nextChar();
@@ -79,7 +80,7 @@ protected:
std::string parseName();
int64_t parseSimpleInt(int base);
bool parseNumber(int sign, number_u& out);
std::string parseString(char chr);
std::string parseString(char chr, bool closeRequired=true);
parsing_error error(std::string message);
+1 -10
View File
@@ -115,16 +115,7 @@ Reader::Reader(Wrapper* wrapper, string file, string source) : BasicParser(file,
void Reader::skipWhitespace() {
BasicParser::skipWhitespace();
if (hasNext() && source[pos] == '#') {
pos++;
while (hasNext()) {
if (source[pos] == '\n') {
pos++;
linestart = pos;
line++;
break;
}
pos++;
}
skipLine();
if (hasNext() && is_whitespace(peek())) {
skipWhitespace();
}