-1

トークナイザーによって生成されるトークンのリストがあります。

List<Token> tokenList = new List<Token>();

そして、これがトークンクラスです。

public class Token
{
    public Tokens TokenName { get; set; }

    public string TokenValue { get; set; }

    public Token Previous {
        get; set;
    }

    public Token Next {
        get; set;
    }

    public Token(Tokens name, string value)
    {
        TokenName = name;
        TokenValue = value;
    }
}

また、リスト内の各トークンのプロパティNextとプロパティを設定する必要がありますが、それらがorまたはトークンを指すのを避け、次のものを使用する必要があります。PreviousNEWLINEWHITESPACETABSPACE

これが私のコードです。

Token token = null;

foreach (Token tkn in tokenList)
{
    if (token != null)
    {
        switch (token.TokenName)
        {
            case Tokens.NEWLINE:
            case Tokens.WHITESPACE:
            case Tokens.TABSPACE:
                break;
            default:
                switch (tkn.TokenName)
                {
                    case Tokens.NEWLINE:
                    case Tokens.WHITESPACE:
                    case Tokens.TABSPACE:
                        break;
                    default:
                        tkn.Previous = token;
                        token.Next = tkn;
                        token = tkn;
                        break;
                }
                break;
       }
    }
    else
    {
        token = tkn;
    }
}

しかし、うまくいかないようです。何か助けてください。

4

2 に答える 2

0

不要なコードをたくさん使ったと思います。ありがとう@Lee、デバッガーを使用しました。ブレークポイントを設定すると、多くのコードが単純に実行されないことがわかりました。これが私の作業コードです。

Token token = null;

foreach (Token tkn in tokenList)
{
    switch (tkn.TokenName)
    {
        case Tokens.NEWLINE:
        case Tokens.WHITESPACE:
        case Tokens.TABSPACE:
            break;
        default:
            tkn.Previous = token;
            if (token != null)
                token.Next = tkn;
            token = tkn;
            break;
    }
}
于 2013-04-22T01:41:27.743 に答える