IScanner Rozhraní

Definice

Používá se jako rozhraní pro analyzátor jazyka v jazykové službě.

public interface class IScanner
public interface class IScanner
__interface IScanner
public interface IScanner
type IScanner = interface
Public Interface IScanner

Příklady

Tady je příklad jednoduché implementace tohoto rozhraní.

[C#]  
namespace MyLanguagePackage  
{  
    class CScanner : IScanner  
    {  
        /////////////////////////////////////////////////////  
        // Fields  

        private string m_line;  
        private int    m_offset;  
        private string m_source;  

        /////////////////////////////////////////////////////  
        // Enumerations  

        private enum ParseState  
        {  
            InText = 0,  
            InQuotes = 1,  
            InComment = 2  
        }  

        /////////////////////////////////////////////////////  
        // Private methods  

        private bool GetNextToken(int startIndex,  
                                 TokenInfo tokenInfo,  
                                 ref int state)  
        {  
            bool bFoundToken = false;  
            int endIndex = -1;  
            int index = startIndex;  
            if (index < m_source.Length)  
            {  
                if (state == (int) ParseState.InQuotes)  
                {  
                    // Find end quote. If found, set state to InText  
                    // and return the quoted string as a single token.  
                    // Otherwise, return the string to the end of the line  
                    // and keep the same state.  
                }  
                else if (state == (int) ParseState.InComment)  
                {  
                    // Find end of comment. If found, set state to InText  
                    // and return the comment as a single token.  
                    // Otherwise, return the comment to the end of the line  
                    // and keep the same state.  
                }  
                else  
                {  
                    // Parse the token starting at index, returning the  
                    // token's start and end index in tokenInfo, along with  
                    // the token's type and color to use.  
                    // If the token is a quoted string and the string continues  
                    // on the next line, set state to InQuotes.  
                    // If the token is a comment and the comment continues  
                    // on the next line, set state to InComment.  
                    bFoundToken = true;  
                }  
            }  
            return bFoundToken;  
        }  

        /////////////////////////////////////////////////////  
        // IScanner methods  

        public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo,  
                                                   ref int state)  
        {  
            bool bFound = false;  
            if (tokenInfo != null)  
            {  
                bFound = GetNextToken(m_offset, tokenInfo, ref state);  
                if (bFound)  
                {  
                    m_offset = tokenInfo.EndIndex + 1;  
                }  
            }  
            return bFound;  
        }  

        public void SetSource(string source, int offset)  
        {  
            m_offset = offset;  
            m_source = source;  
        }  
    }  
}  

Poznámky

Jazyková služba musí analyzovat kód, aby podporovala všechny funkce nabízené Visual Studio vývojářům. Například zvýrazňování syntaxe vyžaduje znalost různých prvků jazyka k poskytnutí správné barvy, zatímco dokončování kódu vyžaduje znalost aktuálního oboru. Určení typu tokenů je role skeneru a zároveň identifikujete funkčnost a rozsah tokenu je role analyzátoru.

Poznámky pro implementátory

Aby bylo možné analyzovat kód, je nutné implementovat IScanner rozhraní pro třídu a volat konstruktor této třídy v implementaci GetScanner(IVsTextLines) .

Poznámky pro volající

Skener používá Colorizer třídu ke zpracování zvýrazňování syntaxe a obvykle je dodáván do konstruktoru colorizer. Analyzátor lze také použít pro jiné jazykové funkce, jako je například identifikace triggerů tokenů, které iniciují složitější analýzu prostřednictvím ParseSource(ParseRequest) metody.

Metody

ScanTokenAndProvideInfoAboutIt(TokenInfo, Int32)

Analyzuje následující token jazyka z aktuálního řádku a vrátí informace o něm.

SetSource(String, Int32)

Nastaví řádek, který se má analyzovat.

Platí pro