Example #1
0
        void Imperative_languageblock(out Node node)
        {
            node = null;
            DesignScript.Parser.Imperative.LanguageBlockNode langblock = new DesignScript.Parser.Imperative.LanguageBlockNode();

            if (la.val == "[") langblock.OpenParenPos.setValue(la.col, la.line, la.val);
            Expect(7);
            langblock.Col = t.col; langblock.Line = t.line;
            Expect(1);
            if (t.val == "Imperative" || t.val == "Associative") langblock.IdentPos.setValue(t.col, t.line, t.val);
            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 == 52) {
            Get();
            string key;
            DesignScript.Parser.Imperative.IDEHelpNode commaPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            langblock.ParaPosList.Add(commaPos);
            Expect(1);
            key = t.val;
            DesignScript.Parser.Imperative.IDEHelpNode identPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.IdentNode };
            langblock.ParaPosList.Add(identPos);
            Expect(53);
            DesignScript.Parser.Imperative.IDEHelpNode assignPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            langblock.ParaPosList.Add(assignPos);
            Expect(4);
            DesignScript.Parser.Imperative.StringNode textstringPos = new DesignScript.Parser.Imperative.StringNode() { Col = t.col, Line = t.line, value = t.val };
            langblock.TextStringList.Add(textstringPos);
            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);
            }

            }
            if (la.val == "]" && langblock.OpenParenPos.Value != null) langblock.CloseParenPos.setValue(la.col, la.line, la.val); else if (la.val != "]") langblock.OpenParenPos.Value = null;
            Expect(8);
            if (la.val == "{") langblock.OpenCurlyBracePos.setValue(la.col, la.line, la.val);
            Expect(50);
            Node codeBlockNode = null;
            if (langblock.CodeBlock.language == ProtoCore.Language.kAssociative ) {
            Hydrogen(out codeBlockNode);
            } else if (langblock.CodeBlock.language == ProtoCore.Language.kImperative ) {
            Imperative(out codeBlockNode);
            } else SynErr(109);
            if (langblock.CodeBlock.language == ProtoCore.Language.kInvalid ) {
            int openCurlyBraceCount = 0, closeCurlyBraceCount = 0;
            DesignScript.Parser.Imperative.CodeBlockNode codeBlockInvalid = new DesignScript.Parser.Imperative.CodeBlockNode();
            while (closeCurlyBraceCount <= openCurlyBraceCount) {
                if (la.kind == 7) {
                    Imperative_languageblock(out codeBlockNode);
                    codeBlockInvalid.Body.Add(codeBlockNode);
                } else if (la.kind == 50) {
                    Get();
                    openCurlyBraceCount++;
                } else if (la.kind == 51) {
                    if (la.val == "}" && langblock.OpenCurlyBracePos.Value != null) langblock.CloseCurlyBracePos.setValue(la.col, la.line, la.val); else if(la.val != "}") langblock.OpenCurlyBracePos.Value = null;
                    Get();
                    closeCurlyBraceCount++;
                } else if (la.kind == 0) {
                    Get();
                    Expect(51);
                    break;
                } else if (true) {
                    Get();
                } else SynErr(110);
            }
            codeBlockNode = codeBlockInvalid;
            } else if (true) {
            if (la.val == "}" && langblock.OpenCurlyBracePos.Value != null) langblock.CloseCurlyBracePos.setValue(la.col, la.line, la.val); else if(la.val != "}") langblock.OpenCurlyBracePos.Value = null;
            Expect(51);
            } else SynErr(111);
            langblock.CodeBlockNode = codeBlockNode;
            node = langblock;
        }
Example #2
0
        void Imperative(out Node codeBlockNode)
        {
            Node node = null;
                               DesignScript.Parser.Imperative.CodeBlockNode codeblock = new DesignScript.Parser.Imperative.CodeBlockNode();
              codeblock.Col = la.col;
            codeblock.Line = la.line;

            while (la.kind != _EOF && la.val !="}") {
            bool valid = false;
            if (StartOf(8)) {
                Imperative_stmt(out node);
                valid = true;
            } else if (la.kind == 25) {
                Imperative_functiondecl(out node);
                valid = true;
            } else SynErr(89);
            if(!valid) Get();
            if (node != null)
            {
               codeblock.Body.Add(node);
            }

            }
            codeBlockNode = codeblock;
        }