コード例 #1
0
ファイル: Parser.cs プロジェクト: Doom2fan/CSharp-ChronosLib
        private void ParseExpr_List(IUDMFBlock block, ParserInfo.BlockInfo?info)
        {
            UDMFToken tok = scanner.LookAhead();

            while (tok.Type == UDMFTokenType.IDENTIFIER)
            {
                tok = scanner.Scan();
                if (tok.Type != UDMFTokenType.IDENTIFIER)
                {
                    Errors.Add(new UDMFParseError("Unexpected token '" + tok.Text.ToString().Replace("\n", "") + "' found. Expected " + UDMFToken.TokenTypeToString(UDMFTokenType.IDENTIFIER), 0x1001, tok));
                    return;
                }

                var tokStr = namePool.GetOrCreate(tok.Text);
                if (info != null && info.Value.Assignments.TryGetValue(namePool.GetOrCreate(tokStr), out var assignment))
                {
                    ParseAssignment_Expr(block, assignment);
                }
                else
                {
                    var val = ParseAssignment_Expr(block, null);

                    unknownAssignmentsPooled.Add(tokStr, GetUnknownAssignment(val.Value));
                }

                tok = scanner.LookAhead();
            }

            if (unknownAssignmentsPooled.Count > 0)
            {
                block.UnknownAssignments = new Dictionary <string, UDMFUnknownAssignment> (StringComparer.InvariantCultureIgnoreCase);
                block.UnknownAssignments.EnsureCapacity(unknownAssignmentsPooled.Count);
                foreach (var kvp in unknownAssignmentsPooled)
                {
                    block.UnknownAssignments.Add(kvp.Key, kvp.Value);
                }

                unknownAssignmentsPooled.Clear();
            }
        }
コード例 #2
0
 public void AddBlock(IUDMFBlock block)
 => Add((T)block);