Ejemplo n.º 1
0
 void Imperative_unaryop(out DesignScript.Parser.Imperative.IDEHelpNode op)
 {
     op = new DesignScript.Parser.Imperative.IDEHelpNode(DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode);
     if (la.kind == 11) {
     Get();
     op.setValue(t.col, t.line, t.val);
     } else if (la.kind == 65) {
     Get();
     op.setValue(t.col, t.line, t.val);
     #if ENABLE_INC_DEC_FIX
     } else if (la.kind == 66 || la.kind == 67) {
     Imperative_PostFixOp(ref op);
     #endif
     } else SynErr(121);
     #if ENABLE_INC_DEC_FIX
     #else
     if (la.val == "++" || la.val == "--") Get();
     #endif
 }
Ejemplo n.º 2
0
 void Imperative_stmt(out Node node)
 {
     node = null;
     if (isFunctionCall()) {
     Imperative_functioncall(out node);
     Expect(20);
     DesignScript.Parser.Imperative.FunctionCallNode fcNode = node as DesignScript.Parser.Imperative.FunctionCallNode;
     fcNode.EndlinePos.setValue(t.col, t.line, t.val);
     node = fcNode;
     } else if (la.kind == 1 || la.kind == 9 || la.kind == 50) {
     Imperative_assignstmt(out node);
     } else if (la.kind == 32) {
     Imperative_ifstmt(out node);
     } else if (la.kind == 35) {
     Imperative_whilestmt(out node);
     } else if (la.kind == 36) {
     Imperative_forloop(out node);
     } else if (la.kind == 7) {
     Imperative_languageblock(out node);
     } else if (la.kind == 45) {
     Get();
     DesignScript.Parser.Imperative.BreakNode bnode = new DesignScript.Parser.Imperative.BreakNode();
     if (t.kind == _Kw_break) bnode.KwBreak.setValue(t.col, t.line, t.val);
     Expect(20);
     if (t.kind == _endline) bnode.EndLine.setValue(t.col, t.line, t.val);
     node = bnode;
     } else if (la.kind == 46) {
     Get();
     DesignScript.Parser.Imperative.ContinueNode cnode = new DesignScript.Parser.Imperative.ContinueNode();
     if (t.kind == _Kw_continue) cnode.KwContinue.setValue(t.col, t.line, t.val);
     Expect(20);
     if (t.kind == _endline) cnode.EndLine.setValue(t.col, t.line, t.val);
     node = cnode;
     } else if (la.kind == 20) {
     Get();
     DesignScript.Parser.Imperative.IDEHelpNode endlineNode = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
     node = endlineNode;
     } else SynErr(107);
 }
Ejemplo n.º 3
0
        void Imperative_term(out Node node)
        {
            node = null;
            Imperative_interimfactor(out node);
            while (la.kind == 58 || la.kind == 59 || la.kind == 60) {
            Operator op;
            Imperative_mulop(out op);
            DesignScript.Parser.Imperative.IDEHelpNode operatorPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            Node rhsNode = null;
            Imperative_interimfactor(out rhsNode);
            DesignScript.Parser.Imperative.BinaryExpressionNode bNode = new DesignScript.Parser.Imperative.BinaryExpressionNode();
            bNode.LeftNode = node;
            bNode.RightNode = rhsNode;
            bNode.Optr = op;
            bNode.Col = node.Col;
            bNode.Line = node.Line;
            bNode.OperatorPos = operatorPos;
            node = bNode;

            }
        }
Ejemplo n.º 4
0
 void Imperative_NameReference(out Node node)
 {
     node = null;
     DesignScript.Parser.Imperative.ArrayNode array = null;
     if (la.kind == 9) {
     Imperative_parenExp(out node);
     } else if (la.kind == 1 || la.kind == 50) {
     if (isFunctionCall()) {
         Imperative_functioncall(out node);
     } else if (la.kind == 1) {
         Imperative_Ident(out node);
     } else {
         DesignScript.Parser.Imperative.ExprListNode exprlist = new DesignScript.Parser.Imperative.ExprListNode();
         if (la.val == "{") exprlist.OpenCurlyBracePos.setValue(la.col, la.line, la.val);
         Get();
         if (StartOf(18)) {
             Imperative_expr(out node);
             exprlist.list.Add(node);
             exprlist.Col = t.col;
             exprlist.Line = t.line;
             while (la.kind == 52) {
                 Get();
                 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 };
                 exprlist.ExprCommaPosList.Add(commaPos);
                 Imperative_expr(out node);
                 exprlist.list.Add(node);
             }
         }
         if (la.val == "}" && exprlist.OpenCurlyBracePos.Value != null) exprlist.CloseCurlyBracePos.setValue(la.col, la.line, la.val); else if (la.val != "}") exprlist.OpenCurlyBracePos.Value = null;
         Expect(51);
         node = exprlist;
     }
     } else SynErr(118);
     if (la.kind == 7) {
     Imperative_arrayIndices(out array);
     array.Ident = node; node = array;
     }
 }
Ejemplo n.º 5
0
 void Imperative_negop(out DesignScript.Parser.Imperative.IDEHelpNode op)
 {
     op = new DesignScript.Parser.Imperative.IDEHelpNode(DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode);
     if (la.kind == 1 || la.kind == 9 || la.kind == 50) {
     } else if (la.kind == 12) {
     Get();
     op.setValue(t.col, t.line, t.val);
     } else SynErr(123);
 }
Ejemplo n.º 6
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;
        }
Ejemplo n.º 7
0
        void Imperative_logicalexpr(out Node node)
        {
            node = null;
            Imperative_RangeExpr(out node);
            while (StartOf(14)) {
            Operator op;
            Imperative_relop(out op);
            DesignScript.Parser.Imperative.IDEHelpNode operatorPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            Node rhsNode = null;
            Imperative_RangeExpr(out rhsNode);
            DesignScript.Parser.Imperative.BinaryExpressionNode bNode = new DesignScript.Parser.Imperative.BinaryExpressionNode();
            bNode.LeftNode = node;
            bNode.RightNode = rhsNode;
            bNode.Optr = op;
            bNode.Col = node.Col;
            bNode.Line = node.Line;
            bNode.OperatorPos = operatorPos;
            node = bNode;

            }
        }
Ejemplo n.º 8
0
        void Imperative_identifierList(out Node node)
        {
            node = null;

            Imperative_NameReference(out node);
            while (la.kind == 6) {
            Get();
            Node rnode = null;
            DesignScript.Parser.Imperative.IDEHelpNode dotPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            Imperative_NameReference(out rnode);
            DesignScript.Parser.Imperative.IdentifierListNode bnode = new DesignScript.Parser.Imperative.IdentifierListNode();
                                            List<DesignScript.Parser.Imperative.IDEHelpNode> dotPosList = new List<DesignScript.Parser.Imperative.IDEHelpNode>();
            dotPosList.Add(dotPos);
            bnode.LeftNode = node;
            bnode.Optr = Operator.dot;
            bnode.RightNode = rnode;
            bnode.Col = node.Col;
            bnode.Line = node.Line;
                                            bnode.DotPosList = dotPosList;
            node = bnode;

            }
        }
Ejemplo n.º 9
0
        void Imperative_functiondecl(out Node node)
        {
            DesignScript.Parser.Imperative.FunctionDefinitionNode funcDecl = new DesignScript.Parser.Imperative.FunctionDefinitionNode();
            Expect(25);
            funcDecl.KeywordPos.setValue(t.col, t.line, t.val);
            funcDecl.Col = t.col; funcDecl.Line = t.line;
            Expect(1);
            funcDecl.Name = t.val;
                                 funcDecl.NamePos.setValue(t.col, t.line, t.val);
            if (la.kind == 54) {
            Get();
            funcDecl.TypeColonPos = new DesignScript.Parser.Imperative.IDEHelpNode();
            funcDecl.TypeColonPos.setValue(t.col, t.line, t.val);
            funcDecl.ReturnTypePos = new DesignScript.Parser.Imperative.IDEHelpNode();
            if (StartOf(12)) {
                if (la.kind == 38) {
                    Get();
                } else if (la.kind == 37) {
                    Get();
                } else if (la.kind == 39) {
                    Get();
                } else {
                    Get();
                }
                funcDecl.ReturnTypePos.Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.KeywordNode;
            } else if (la.kind == 1) {
                Get();
                funcDecl.ReturnTypePos.Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.TypeNode;
            } else SynErr(108);
            funcDecl.ReturnType = new ProtoCore.Type() { Name = t.val };
            funcDecl.ReturnTypePos.setValue(t.col, t.line, t.val);
            while (la.kind == 7) {
                string _open = null; int _open_line = 0; int _open_col = 0; string _close = null; if (la.val == "[") { _open = la.val; _open_line = la.line; _open_col = la.col; }
                Get();
                if(la.val == "]") _close = la.val;
                Expect(8);
                if (_open != null && _close != null) { funcDecl.Brackets.Add(new DesignScript.Parser.Imperative.IDEHelpNode() { Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode, Value = _open, Line = _open_line, Col = _open_col }); funcDecl.Brackets.Add(new DesignScript.Parser.Imperative.IDEHelpNode() { Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode, Value = _close, Line = t.line, Col = t.col }); }
            }
            }
            if (la.val == "(") funcDecl.OpenParenPos.setValue(la.col, la.line, la.val);
            Expect(9);
            if (la.kind == 1) {
            DesignScript.Parser.Imperative.ArgumentSignatureNode args = new DesignScript.Parser.Imperative.ArgumentSignatureNode();
            args.Col = t.col;
            args.Line = t.line;
            Node argdecl = null;
            Imperative_vardecl(out argdecl);
            args.AddArgument(argdecl as DesignScript.Parser.Imperative.VarDeclNode);
            while (la.kind == 52) {
                Get();
                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 };
                funcDecl.ArgCommaPosList.Add(commaPos);
                Imperative_vardecl(out argdecl);
                args.AddArgument(argdecl as DesignScript.Parser.Imperative.VarDeclNode);
            }
            funcDecl.Signature = args;
            }
            if (la.val == ")" && funcDecl.OpenParenPos.Value != null) funcDecl.CloseParenPos.setValue(la.col, la.line, la.val); else if (la.val != ")") funcDecl.OpenParenPos.Value = null;
            Expect(10);
            isGlobalScope = false;
            if (la.val == "{") funcDecl.OpenCurlyBracePos.setValue(la.col, la.line, la.val);
            Expect(50);
            funcDecl.FunctionBody = new DesignScript.Parser.Imperative.CodeBlockNode();
            funcDecl.FunctionBody.Col = t.col;
              funcDecl.FunctionBody.Line = t.line;
            List<Node> body = null;

            Imperative_stmtlist(out body);
            if (la.val == "}" && funcDecl.OpenCurlyBracePos.Value != null) funcDecl.CloseCurlyBracePos.setValue(la.col, la.line, la.val); else if (la.val != "}") funcDecl.OpenCurlyBracePos.Value = null;
            Expect(51);
            funcDecl.localVars = localVarCount;
            funcDecl.FunctionBody.Body = body;
            node = funcDecl;

            isGlobalScope = true;
            localVarCount=  0;
        }
Ejemplo n.º 10
0
 void Imperative_functioncall(out Node node)
 {
     Expect(1);
     DesignScript.Parser.Imperative.IdentifierNode function = new DesignScript.Parser.Imperative.IdentifierNode() { Value = t.val, Name = t.val, Col = t.col, Line = t.line };
     List<Node> arglist = new List<Node>();
                           List<DesignScript.Parser.Imperative.IDEHelpNode> argCommaPosList = new List<DesignScript.Parser.Imperative.IDEHelpNode>();
     DesignScript.Parser.Imperative.IDEHelpNode openParenPos = null; DesignScript.Parser.Imperative.IDEHelpNode closeParenPos = null;
     if (la.val == "(") openParenPos = new DesignScript.Parser.Imperative.IDEHelpNode()  { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
     Expect(9);
     if (StartOf(18)) {
     Node argNode = null;
     Imperative_expr(out argNode);
     arglist.Add(argNode);
     while (la.kind == 52) {
         Get();
         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 };
         argCommaPosList.Add(commaPos);
         Imperative_expr(out argNode);
         arglist.Add(argNode);
     }
     }
     if (la.val == ")" && openParenPos != null) closeParenPos = new DesignScript.Parser.Imperative.IDEHelpNode()  { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode }; else if (la.val != ")") openParenPos = null;
     Expect(10);
     DesignScript.Parser.Imperative.FunctionCallNode funcNode = new DesignScript.Parser.Imperative.FunctionCallNode();
     funcNode.Col = function.Col;
     funcNode.Line = function.Line;
                              funcNode.OpenParenPos = openParenPos;
                              funcNode.CloseParenPos = closeParenPos;
                              funcNode.ArgCommaPosList = argCommaPosList;
     funcNode.Function = function;
     funcNode.FormalArguments = arglist;
     node = funcNode;
 }
Ejemplo n.º 11
0
        void Imperative_assignstmt(out Node node)
        {
            node = null;
            Node lhsNode = null;
            isLeft = true;
            Imperative_DecoratedIdentifier(out lhsNode);
            node = lhsNode;
            isLeft = false;
            if (!(lhsNode is DesignScript.Parser.Imperative.PostFixNode)) {
            DesignScript.Parser.Imperative.IDEHelpNode operatorPos = null;
            Expect(53);
            if (t.val == "=") operatorPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            DesignScript.Parser.Imperative.IDEHelpNode endline = null;
            Node rhsNode = null;
            if (la.val == "[") {
            Imperative_languageblock(out rhsNode);
            } else if (HasMoreAssignmentStatements()) {
            Imperative_assignstmt(out rhsNode);
            } else if (StartOf(18)) {
            Imperative_expr(out rhsNode);
            Expect(20);
            if (t.kind == _endline) endline = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            } else SynErr(112);
            DesignScript.Parser.Imperative.BinaryExpressionNode bNode = new DesignScript.Parser.Imperative.BinaryExpressionNode();
            bNode.LeftNode = lhsNode;
            bNode.RightNode = rhsNode;
            bNode.Optr = Operator.assign;
            bNode.OperatorPos = operatorPos;
            bNode.Col = lhsNode.Col;
            bNode.Line = lhsNode.Line;
            bNode.EndlinePos = endline;
            node = bNode;

            }
        }
Ejemplo n.º 12
0
        void Imperative_arrayIndices(out DesignScript.Parser.Imperative.ArrayNode array)
        {
            array = new DesignScript.Parser.Imperative.ArrayNode();
            DesignScript.Parser.Imperative.IDEHelpNode openBracketPos = null;
            if (la.val == "[") openBracketPos = new DesignScript.Parser.Imperative.IDEHelpNode()  { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            Expect(7);
            Node node = null;
            if (StartOf(18)) {
            Imperative_expr(out node);
            }
            array.Col = t.col;
            array.Line = t.line;
            array.OpenBracketPos = openBracketPos;
            array.Expr = node;
            array.Type = null;

            if (la.val == "]" && array.OpenBracketPos != null) array.CloseBracketPos.setValue(la.col, la.line, la.val); else if (la.val != "]") array.OpenBracketPos = null;
            Expect(8);
            while (la.kind == 7) {
            DesignScript.Parser.Imperative.IDEHelpNode openBracketPos2 = null;
            if (la.val == "[") openBracketPos2 = new DesignScript.Parser.Imperative.IDEHelpNode()  { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode };
            Get();
            node = null;
            if (StartOf(18)) {
                Imperative_expr(out node);
            }
            DesignScript.Parser.Imperative.ArrayNode array2 = new DesignScript.Parser.Imperative.ArrayNode();
            array2.Col = t.col;
            array2.Line = t.line;
            array2.OpenBracketPos = openBracketPos2;
            array2.Expr = node;
            array2.Type = array;

            if (la.val == "]" && array2.OpenBracketPos != null) array2.CloseBracketPos.setValue(la.col, la.line, la.val); else if (la.val != "]") array2.OpenBracketPos = null;
            Expect(8);
            array = array2;
            }
        }