コード例 #1
0
ファイル: ImperativeAST.cs プロジェクト: heegwon/Dynamo
 public LanguageBlockNode(LanguageBlockNode rhs) : base(rhs)
 {
     CodeBlockNode = ProtoCore.Utils.NodeUtils.Clone(rhs.CodeBlockNode);
     codeblock = new ProtoCore.LanguageCodeBlock(rhs.codeblock);
     Attributes = new List<ImperativeNode>();
     foreach (ImperativeNode aNode in rhs.Attributes)
     {
         ImperativeNode newNode = ProtoCore.Utils.NodeUtils.Clone(aNode);
         Attributes.Add(newNode);
     }
 }
コード例 #2
0
        public override AssociativeNode VisitLanguageBlockNode(LanguageBlockNode node)
        {
            var cbn = node.CodeBlockNode as CodeBlockNode;

            if (cbn == null)
            {
                return(base.VisitLanguageBlockNode(node));
            }

            var nodeList = cbn.Body.Select(astNode => astNode.Accept(this)).ToList();

            cbn.Body = nodeList;
            return(node);
        }
コード例 #3
0
ファイル: Parser.cs プロジェクト: zjloscar/Dynamo
        void languageblock(out Node node)
        {
            node = null;
            LanguageBlockNode langblock = new LanguageBlockNode();

            Expect(6);
            Expect(1);
            if (0 == t.val.CompareTo("Imperative"))
            {
                langblock.codeblock.language = ProtoCore.Language.kImperative;
            }
            else if (0 == t.val.CompareTo("Associative"))
            {
                langblock.codeblock.language = ProtoCore.Language.kAssociative;
            }

            while (la.kind == 30)
            {
                Get();
                string key;
                Expect(1);
                key = t.val;
                Expect(31);
                Expect(4);
                if ("fingerprint" == key)
                {
                    langblock.codeblock.fingerprint = t.val;
                    langblock.codeblock.fingerprint = langblock.codeblock.fingerprint.Remove(0, 1);
                    langblock.codeblock.fingerprint = langblock.codeblock.fingerprint.Remove(langblock.codeblock.fingerprint.Length - 1, 1);
                }
                else if ("version" == key)
                {
                    langblock.codeblock.version = t.val;
                    langblock.codeblock.version = langblock.codeblock.version.Remove(0, 1);
                    langblock.codeblock.version = langblock.codeblock.version.Remove(langblock.codeblock.version.Length - 1, 1);
                }
            }
            Expect(7);
            Expect(26);
            langblock.codeblock.body = t.val.Substring(2, t.val.Length - 4);
            node = langblock;
            ParseLanguageBlockNode(langblock);
        }
コード例 #4
0
ファイル: Parser.cs プロジェクト: zjloscar/Dynamo
        private void ParseLanguageBlockNode(LanguageBlockNode langblock)
        {
            if (!core.langverify.Verify(langblock.codeblock))
            {
                return;
            }

            ProtoCore.ParserBase   parser    = null;
            System.IO.MemoryStream memstream = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(langblock.codeblock.body));

            if (langblock.codeblock.language == ProtoCore.Language.kImperative)
            {
                parser = new Imperative.Parser(new Imperative.Scanner(memstream), core);
            }
            else if (langblock.codeblock.language == ProtoCore.Language.kAssociative)
            {
                parser = new Associative.Parser(new Associative.Scanner(memstream), core);
            }

            try
            {
                parser.errorStream = new System.IO.StringWriter();
                parser.Parse();

                if (parser.errorStream.ToString() != String.Empty)
                {
                    core.BuildStatus.LogSyntaxError(parser.errorStream.ToString());
                }
                core.BuildStatus.errorCount += parser.errorCount;

                langblock.codeBlockNode = parser.codeblock;
            }
            catch (ProtoCore.BuildHaltException e)
            {
                System.Console.WriteLine(e.errorMsg);
            }
        }
コード例 #5
0
 public virtual void VisitLanguageBlockNode(LanguageBlockNode node)
 {
     DefaultVisit(node);
 }
コード例 #6
0
ファイル: AstVisitor.cs プロジェクト: zjloscar/Dynamo
 public virtual TAssociative VisitLanguageBlockNode(LanguageBlockNode node)
 {
     return(VisitAssociativeNode(node));
 }
コード例 #7
0
 public virtual bool VisitLanguageBlockNode(LanguageBlockNode node)
 {
     return(DefaultVisit(node));
 }