Browse Source

Fixed forum-15559: C# lexer reports error on identifiers like @_ABC

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2419 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
15da21072b
  1. 2
      src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs
  2. 28
      src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs

2
src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs

@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
ch = (char)next;
if (ch == '"') {
token = ReadVerbatimString();
} else if (Char.IsLetterOrDigit(ch)) {
} else if (Char.IsLetterOrDigit(ch) || ch == '_') {
token = new Token(Tokens.Identifier, x - 1, y, ReadIdent(ch));
} else {
errors.Error(y, x, String.Format("Unexpected char in Lexer.Next() : {0}", ch));

28
src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs

@ -41,6 +41,34 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp @@ -41,6 +41,34 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp
Assert.AreEqual("a_Bc05", t.val);
}
[Test]
public void TestIdentifierStartingWithUnderscore()
{
ILexer lexer = GenerateLexer(new StringReader("_Bc05"));
Token t = lexer.NextToken();
Assert.AreEqual(Tokens.Identifier, t.kind);
Assert.AreEqual("_Bc05", t.val);
}
[Test]
public void TestKeyWordAsIdentifier()
{
ILexer lexer = GenerateLexer(new StringReader("@int"));
Token t = lexer.NextToken();
Assert.AreEqual(Tokens.Identifier, t.kind);
Assert.AreEqual("int", t.val);
}
[Test]
public void TestKeyWordAsIdentifierStartingWithUnderscore()
{
ILexer lexer = GenerateLexer(new StringReader("@_int"));
Token t = lexer.NextToken();
Assert.AreEqual(Tokens.Identifier, t.kind);
Assert.AreEqual("_int", t.val);
}
[Test]
public void TestSkippedEmptyBlock()
{

Loading…
Cancel
Save