|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections;
using System.IO;
#nullable disable
namespace Microsoft.Build.Shared.LanguageParser
{
/*
* Class: CSharpTokenizer
*
* Given C# sources, return an enumerator that will provide tokens one at a time.
*
*/
internal sealed class CSharpTokenizer : IEnumerable
{
/*
These are the tokens that are specific to the C# tokenizer.
Tokens that should be shared with other tokenizers should go
into Token.cs.
*/
internal class CharLiteralToken : Token { } // i.e. A char value.
internal class NullLiteralToken : Token { } // i.e. A literal Null.
internal class UnrecognizedStringEscapeToken : SyntaxErrorToken { } // An unrecognized string escape character was used.
internal class EndOfFileInsideStringToken : SyntaxErrorToken { } // The file ended inside a string.
internal class NewlineInsideStringToken : SyntaxErrorToken { } // The string has a newline embedded.
internal class EndOfFileInsideCommentToken : SyntaxErrorToken { } // The file ended inside a multi-line comment.
internal class OpenScopeToken : OperatorOrPunctuatorToken { } // i.e. "{"
internal class CloseScopeToken : OperatorOrPunctuatorToken { } // i.e. "}"
// The source lines
private Stream _binaryStream = null;
// Whether to force ANSI or not.
private bool _forceANSI = false;
/// <summary>
/// Construct.
/// </summary>
/// <param name="binaryStream"></param>
/// <param name="forceANSI"></param>
internal CSharpTokenizer(Stream binaryStream, bool forceANSI)
{
_binaryStream = binaryStream;
_forceANSI = forceANSI;
}
/*
* Method: GetEnumerator
*
* Return a new token enumerator.
*/
public IEnumerator GetEnumerator()
{
return new CSharpTokenEnumerator(_binaryStream, _forceANSI);
}
}
}
|