示例#1
0
        /// <inheritdoc />
        public override CProcessorParseResult Parse(string str, CProcessorState state)
        {
            str = str.Trim().Substring("#define ".Length).Trim();
            var spaceIndex = str.IndexOf(" ", StringComparison.CurrentCulture);

            string name;
            string value;

            if (spaceIndex >= 0)
            {
                name  = str.Substring(0, spaceIndex).Trim();
                str   = str.Substring(spaceIndex).Trim();
                value = str.Trim();
                str   = string.Empty;
            }
            else
            {
                name  = str.Trim();
                value = true.ToString();
                str   = string.Empty;
            }

            var define = new CDefine(name, value, state.CurrentTree);

            state.CurrentTree.AddSubTree(define);

            return(new CProcessorParseResult(state.CurrentTree, true, str));
        }
示例#2
0
        /// <inheritdoc />
        public override CProcessorParseResult Parse(string str, CProcessorState state)
        {
            if (!state.Values.GetValue <bool>("InEnum"))
            {
                str = str.Substring("enum ".Length).Trim();
                var openIndex = str.IndexOf("{", StringComparison.CurrentCulture);
                var name      = str.Substring(0, openIndex).Trim();
                state.Values.SetValue("InEnum", true);
                var e = new CEnum(name, state.CurrentTree);
                state.CurrentTree.AddSubTree(e);

                return(new CProcessorParseResult(e, false, string.Empty));
            }

            str = str.Trim();
            var equalIndex = str.IndexOf("=", StringComparison.InvariantCulture);

            if (equalIndex > 0)
            {
                var name = str.Substring(0, equalIndex).Trim();
                str = str.Substring(equalIndex + 1).Trim();
                var nextIndex = str.IndexOf(",", StringComparison.InvariantCulture);
                var value     = nextIndex > 0 ? str.Substring(0, nextIndex).Trim() : str.Trim();
                var eValue    = new CEnumValue(name, value, state.CurrentTree);
                state.CurrentTree.AddSubTree(eValue);

                return(new CProcessorParseResult(state.CurrentTree, false, string.Empty));
            }

            if (str.IndexOf("}", StringComparison.InvariantCulture) >= 0)
            {
                return(new CProcessorParseResult(state.CurrentTree.Parent, true, string.Empty));
            }

            // Skip Line
            return(new CProcessorParseResult(state.CurrentTree, false, string.Empty));
        }
示例#3
0
 public abstract CProcessorParseResult Parse(string str, CProcessorState state);