/// <summary> /// 予約後のチェックと代入文への変換作業を行います。 /// </summary> private void CheckWord() { // 予約語句のチェックなど tokens.MoveTop(); for (; !tokens.IsEOF(); tokens.MoveNext()) { // 予約語句の置き換え if (tokens.CurrentTokenType == NakoTokenType.WORD) { var token = tokens.CurrentToken; string key = token.GetValueAsName(); if (tokenDic.ContainsKey(token.GetValueAsName())) { token.Type = tokenDic[key]; } } // 助詞が「は」ならば、代入文に変える if (tokens.CurrentToken.Josi == "は") { tokens.CurrentToken.Josi = ""; tokens.InsertAfterCurrentToken(new NakoToken(NakoTokenType.EQ)); } // コメントならばトークンから取り除く if (tokens.CurrentTokenType == NakoTokenType.COMMENT) { tokens.RemoveCurrentToken(); continue; } } }
/// <summary> /// 予約語のチェックと代入文への変換作業を行います。 /// </summary> private void CheckWord() { // 予約語句のチェックなど tokens.MoveTop(); for (; !tokens.IsEOF(); tokens.MoveNext()) { // 予約語句の置き換え if (tokens.CurrentTokenType == NakoTokenType.WORD) { var token = tokens.CurrentToken; string key = token.GetValueAsName(); if (tokenDic.ContainsKey(token.GetValueAsName())) { token.Type = tokenDic [key]; } else if (tokenDic.MayBeFunction(token.Value)) { tokens.Save(); StringBuilder tmp = new StringBuilder(); int indexFrom = tokens.IndexOf(token); while (!tokens.IsEOF()) { token = tokens.CurrentToken; tmp.Append(token.Value); if (tokenDic.IsFunction(tmp.ToString())) { NakoToken funcToken = new NakoToken(NakoTokenType.FUNCTION_NAME); funcToken.Josi = token.Josi; funcToken.Value = tmp.ToString(); int indexTo = tokens.IndexOf(token); for (int i = indexTo; i >= indexFrom; i--) { tokens.RemoveAt(i); } tokens.Insert(indexFrom, funcToken); break; } else if (!tokenDic.MayBeFunction(tmp.ToString())) { tokens.Restore(); break; } tmp.Append(token.Josi); tokens.MoveNext(); } if (tokens.IsEOF()) { return; } } } // 助詞が「は」ならば、代入文に変える if (tokens.CurrentToken.Josi == "は") { tokens.CurrentToken.Josi = ""; tokens.InsertAfterCurrentToken(new NakoToken(NakoTokenType.EQ)); } // コメントならばトークンから取り除く if (tokens.CurrentTokenType == NakoTokenType.COMMENT) { tokens.RemoveCurrentToken(); continue; } } }