예제 #1
0
        public override CILClassField BuildNode(ParseTreeNode node)
        {
            var result = new CILClassField();

            var idParseTreeNode = node.GetFirstChildWithGrammarName(GrammarNames.id);
            var fieldName       = IdParseTreeNodeHelper.GetValue(idParseTreeNode);

            result.Name = fieldName;

            var typeParseTreeNode = node.GetFirstChildWithGrammarName(GrammarNames.type);
            var fieldType         = TypeParseTreeNodeHelper.GetType(typeParseTreeNode);

            result.Type = fieldType;

            var fieldAttrParseTreeNode = node.GetFirstChildWithGrammarName(GrammarNames.fieldAttr);

            result.Attributes = FieldAttrParseTreeNodeHelper.GetAllAttributes(fieldAttrParseTreeNode);

            var initOptParseTreeNode   = node.GetFirstChildWithGrammarName(GrammarNames.initOpt);
            var fieldInitParseTreeNode = initOptParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.fieldInit);

            if (fieldInitParseTreeNode != null)
            {
                var int64ParseTreeNode = fieldInitParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.int64);
                var fieldInitValue     = Int64ParseTreeNodeHelper.GetValue(int64ParseTreeNode);
                result.InitValue = fieldInitValue;
            }

            return(result);
        }
        public override CILInstructionI8 BuildNode(ParseTreeNode node)
        {
            var instrI8ParseTreeNode = node.GetFirstChildWithGrammarName(GrammarNames.INSTR_I8);

            CILInstructionI8 result = null;

            var ldci8ParseTreeNode = instrI8ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.keyword_ldci8);

            if (ldci8ParseTreeNode != null)
            {
                result = new LoadConstantLongInstruction();
            }

            if (result != null)
            {
                var int64ParseTreeNode = node.GetFirstChildWithGrammarName(GrammarNames.int64);
                result.Value = Int64ParseTreeNodeHelper.GetValue(int64ParseTreeNode);

                return(result);
            }

            throw new ArgumentException("Cannot recognize CIL instruction i8.");
        }