forked from PuqiAR/Fig-TreeWalker
删除蠢蛋注释
This commit is contained in:
@@ -348,25 +348,21 @@ namespace Fig
|
|||||||
{
|
{
|
||||||
UTF8Char ch = *it;
|
UTF8Char ch = *it;
|
||||||
|
|
||||||
// 数字或e(原代码允许e在数字中间)
|
|
||||||
if (ch.isDigit() || ch == U'e')
|
if (ch.isDigit() || ch == U'e')
|
||||||
{
|
{
|
||||||
numStr += ch.getString();
|
numStr += ch.getString();
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
// 负号:只有当后面还有字符且不是数字结尾时才处理
|
|
||||||
else if (ch == U'-' && !numStr.empty() && (numStr.ends_with(U'e') || numStr.ends_with(U'E')))
|
else if (ch == U'-' && !numStr.empty() && (numStr.ends_with(U'e') || numStr.ends_with(U'E')))
|
||||||
{
|
{
|
||||||
numStr += ch.getString();
|
numStr += ch.getString();
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
// 正号:同上
|
|
||||||
else if (ch == U'+' && !numStr.empty() && (numStr.ends_with(U'e') || numStr.ends_with(U'E')))
|
else if (ch == U'+' && !numStr.empty() && (numStr.ends_with(U'e') || numStr.ends_with(U'E')))
|
||||||
{
|
{
|
||||||
numStr += ch.getString();
|
numStr += ch.getString();
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
// 小数点:只能有一个
|
|
||||||
else if (ch == U'.' && !hasPoint)
|
else if (ch == U'.' && !hasPoint)
|
||||||
{
|
{
|
||||||
hasPoint = true;
|
hasPoint = true;
|
||||||
@@ -378,11 +374,8 @@ namespace Fig
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查合法性
|
|
||||||
if (numStr.empty()) { return IllegalTok; }
|
if (numStr.empty()) { return IllegalTok; }
|
||||||
|
|
||||||
// 检查以e结尾的情况
|
|
||||||
if (numStr.ends_with(U'e'))
|
if (numStr.ends_with(U'e'))
|
||||||
{
|
{
|
||||||
error = SyntaxError(
|
error = SyntaxError(
|
||||||
@@ -390,7 +383,6 @@ namespace Fig
|
|||||||
return IllegalTok;
|
return IllegalTok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否至少有一个数字
|
|
||||||
bool hasDigit = false;
|
bool hasDigit = false;
|
||||||
for (auto it = numStr.begin(); it != numStr.end(); ++it)
|
for (auto it = numStr.begin(); it != numStr.end(); ++it)
|
||||||
{
|
{
|
||||||
@@ -408,11 +400,9 @@ namespace Fig
|
|||||||
return IllegalTok;
|
return IllegalTok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查科学计数法格式:e后面必须有数字
|
|
||||||
size_t ePos = numStr.find(U'e');
|
size_t ePos = numStr.find(U'e');
|
||||||
if (ePos != FString::npos)
|
if (ePos != FString::npos)
|
||||||
{
|
{
|
||||||
// e不能在开头
|
|
||||||
if (ePos == 0)
|
if (ePos == 0)
|
||||||
{
|
{
|
||||||
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
||||||
@@ -420,8 +410,6 @@ namespace Fig
|
|||||||
it.column());
|
it.column());
|
||||||
return IllegalTok;
|
return IllegalTok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// e后面必须有内容
|
|
||||||
if (ePos + 1 >= numStr.length())
|
if (ePos + 1 >= numStr.length())
|
||||||
{
|
{
|
||||||
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
||||||
@@ -429,15 +417,12 @@ namespace Fig
|
|||||||
it.column());
|
it.column());
|
||||||
return IllegalTok;
|
return IllegalTok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查e后面的部分
|
|
||||||
bool hasDigitAfterE = false;
|
bool hasDigitAfterE = false;
|
||||||
for (size_t i = ePos + 1; i < numStr.length(); ++i)
|
for (size_t i = ePos + 1; i < numStr.length(); ++i)
|
||||||
{
|
{
|
||||||
UTF8Char c = std::u8string(1,numStr[i]);
|
UTF8Char c = std::u8string(1,numStr[i]);
|
||||||
if (c == U'+' || c == U'-')
|
if (c == U'+' || c == U'-')
|
||||||
{
|
{
|
||||||
// 符号只能紧跟在e后面
|
|
||||||
if (i != ePos + 1)
|
if (i != ePos + 1)
|
||||||
{
|
{
|
||||||
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
||||||
@@ -451,7 +436,6 @@ namespace Fig
|
|||||||
if (c.isDigit()) { hasDigitAfterE = true; }
|
if (c.isDigit()) { hasDigitAfterE = true; }
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// e后面只能有符号和数字
|
|
||||||
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
error = SyntaxError(FString(std::format("Illegal number literal: {}", numStr.toBasicString())),
|
||||||
this->line,
|
this->line,
|
||||||
it.column());
|
it.column());
|
||||||
|
|||||||
Reference in New Issue
Block a user