mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 15:48:38 +00:00
MC/Lexer: Add 'Real' token type for floating point literals.
llvm-svn: 114718
This commit is contained in:
parent
5a7991262a
commit
eacb42cfee
@ -33,6 +33,9 @@ public:
|
||||
// Integer values.
|
||||
Integer,
|
||||
|
||||
// Real values.
|
||||
Real,
|
||||
|
||||
// Register values (stored in IntVal). Only used by TargetAsmLexer.
|
||||
Register,
|
||||
|
||||
|
@ -65,9 +65,21 @@ int AsmLexer::getNextChar() {
|
||||
}
|
||||
|
||||
/// LexIdentifier: [a-zA-Z_.][a-zA-Z0-9_$.@]*
|
||||
static bool IsIdentifierChar(char c) {
|
||||
return isalnum(c) || c == '_' || c == '$' || c == '.' || c == '@';
|
||||
}
|
||||
AsmToken AsmLexer::LexIdentifier() {
|
||||
while (isalnum(*CurPtr) || *CurPtr == '_' || *CurPtr == '$' ||
|
||||
*CurPtr == '.' || *CurPtr == '@')
|
||||
// Check for floating point literals.
|
||||
if (CurPtr[-1] == '.' && isdigit(*CurPtr)) {
|
||||
while (isdigit(*CurPtr))
|
||||
++CurPtr;
|
||||
if (!IsIdentifierChar(*CurPtr)) {
|
||||
return AsmToken(AsmToken::Real,
|
||||
StringRef(TokStart, CurPtr - TokStart));
|
||||
}
|
||||
}
|
||||
|
||||
while (IsIdentifierChar(*CurPtr))
|
||||
++CurPtr;
|
||||
|
||||
// Handle . as a special case.
|
||||
@ -124,7 +136,6 @@ static void SkipIgnoredIntegerSuffix(const char *&CurPtr) {
|
||||
CurPtr += 3;
|
||||
}
|
||||
|
||||
|
||||
/// LexDigit: First character is [0-9].
|
||||
/// Local Label: [0-9][:]
|
||||
/// Forward/Backward Label: [0-9][fb]
|
||||
@ -132,13 +143,21 @@ static void SkipIgnoredIntegerSuffix(const char *&CurPtr) {
|
||||
/// Octal integer: 0[0-7]+
|
||||
/// Hex integer: 0x[0-9a-fA-F]+
|
||||
/// Decimal integer: [1-9][0-9]*
|
||||
/// TODO: FP literal.
|
||||
AsmToken AsmLexer::LexDigit() {
|
||||
// Decimal integer: [1-9][0-9]*
|
||||
if (CurPtr[-1] != '0') {
|
||||
while (isdigit(*CurPtr))
|
||||
++CurPtr;
|
||||
|
||||
|
||||
// Check for floating point literals.
|
||||
if (*CurPtr == '.') {
|
||||
++CurPtr;
|
||||
while (isdigit(*CurPtr))
|
||||
++CurPtr;
|
||||
|
||||
return AsmToken(AsmToken::Real, StringRef(TokStart, CurPtr - TokStart));
|
||||
}
|
||||
|
||||
StringRef Result(TokStart, CurPtr - TokStart);
|
||||
|
||||
long long Value;
|
||||
|
@ -208,6 +208,9 @@ static int AsLexInput(const char *ProgName) {
|
||||
case AsmToken::Integer:
|
||||
Out->os() << "int: " << Lexer.getTok().getString() << '\n';
|
||||
break;
|
||||
case AsmToken::Real:
|
||||
Out->os() << "real: " << Lexer.getTok().getString() << '\n';
|
||||
break;
|
||||
case AsmToken::Register:
|
||||
Out->os() << "register: " << Lexer.getTok().getRegVal() << '\n';
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user