add string literals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73858 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-06-21 19:56:35 +00:00
parent 4506bd2cfd
commit 10a907d70f
3 changed files with 35 additions and 2 deletions

View File

@ -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();

View File

@ -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

View File

@ -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;