forked from OSchip/llvm-project
parent
99f0b60f45
commit
419a97491a
|
@ -77,7 +77,7 @@ asmtok::TokKind AsmLexer::LexIdentifier() {
|
|||
while (isalnum(*CurPtr) || *CurPtr == '_' || *CurPtr == '$' ||
|
||||
*CurPtr == '.' || *CurPtr == '@')
|
||||
++CurPtr;
|
||||
CurStrVal.assign(TokStart, CurPtr); // Skip %
|
||||
CurStrVal.assign(TokStart, CurPtr); // Include %
|
||||
return asmtok::Identifier;
|
||||
}
|
||||
|
||||
|
@ -194,6 +194,28 @@ asmtok::TokKind AsmLexer::LexDigit() {
|
|||
return asmtok::IntVal;
|
||||
}
|
||||
|
||||
/// LexQuote: String: "..."
|
||||
asmtok::TokKind AsmLexer::LexQuote() {
|
||||
int CurChar = getNextChar();
|
||||
// TODO: does gas allow multiline string constants?
|
||||
while (CurChar != '"') {
|
||||
if (CurChar == '\\') {
|
||||
// Allow \", etc.
|
||||
CurChar = getNextChar();
|
||||
}
|
||||
|
||||
if (CurChar == EOF) {
|
||||
PrintError(TokStart, "unterminated string constant");
|
||||
return asmtok::Eof;
|
||||
}
|
||||
|
||||
CurChar = getNextChar();
|
||||
}
|
||||
|
||||
CurStrVal.assign(TokStart, CurPtr); // include quotes.
|
||||
return asmtok::String;
|
||||
}
|
||||
|
||||
|
||||
asmtok::TokKind AsmLexer::LexToken() {
|
||||
TokStart = CurPtr;
|
||||
|
@ -228,6 +250,7 @@ asmtok::TokKind AsmLexer::LexToken() {
|
|||
case '%': return LexPercent();
|
||||
case '/': return LexSlash();
|
||||
case '#': return LexHash();
|
||||
case '"': return LexQuote();
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
return LexDigit();
|
||||
|
|
|
@ -28,10 +28,15 @@ namespace asmtok {
|
|||
// Markers
|
||||
Eof, Error,
|
||||
|
||||
// String values.
|
||||
Identifier,
|
||||
Register,
|
||||
String,
|
||||
|
||||
// Integer values.
|
||||
IntVal,
|
||||
|
||||
// No-value.
|
||||
EndOfStatement,
|
||||
Colon,
|
||||
Plus,
|
||||
|
@ -70,7 +75,8 @@ public:
|
|||
asmtok::TokKind getKind() const { return CurKind; }
|
||||
|
||||
const std::string &getCurStrVal() const {
|
||||
assert((CurKind == asmtok::Identifier || CurKind == asmtok::Register) &&
|
||||
assert((CurKind == asmtok::Identifier || CurKind == asmtok::Register ||
|
||||
CurKind == asmtok::String) &&
|
||||
"This token doesn't have a string value");
|
||||
return CurStrVal;
|
||||
}
|
||||
|
@ -95,6 +101,7 @@ private:
|
|||
asmtok::TokKind LexSlash();
|
||||
asmtok::TokKind LexHash();
|
||||
asmtok::TokKind LexDigit();
|
||||
asmtok::TokKind LexQuote();
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -82,6 +82,9 @@ static int AssembleInput(const char *ProgName) {
|
|||
case asmtok::Register:
|
||||
outs() << "register: " << Lexer.getCurStrVal() << '\n';
|
||||
break;
|
||||
case asmtok::String:
|
||||
outs() << "string: " << Lexer.getCurStrVal() << '\n';
|
||||
break;
|
||||
case asmtok::IntVal:
|
||||
outs() << "int: " << Lexer.getCurIntVal() << '\n';
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue