public System.IAsyncResult Beginacquire(acquire acquire, System.AsyncCallback callback, object asyncState)
 {
     return this.BeginInvoke("acquire", new object[] {
                 acquire}, callback, asyncState);
 }
Example #2
0
        private stmt ParseStmt()
        {
            stmt result;

            #region newline
            linecount();
            #endregion

            if (index < tokens.Count - 1)
            {
                #region DISPLAY
                if (index != tokens.Count - 1 && tokens[index].ToString().Equals("display"))
                {
                    //   linecount();
                    // ////MessageBox.Show("i am in display");
                    display Display = new display();
                    index++;
                    linecount();
                    Display.Expr = ParsExpr("blah");
                    if (Display.Expr is StringLiteral || Display.Expr is Variable)
                    {
                        if (Display.Expr is Variable)
                        {
                            //MessageBox.Show(tokens[index - 1].ToString());
                            if (!identifier.identity.Contains(tokens[index - 1].ToString()))
                            {
                                adderror("undeclared identifier");
                                linecount();
                                // index++;
                            }
                            else if (identifier.assignment[identifier.identity.IndexOf(tokens[index - 1].ToString())] == false)
                            {
                                adderror(tokens[index - 1].ToString() + " : unassigned");
                                linecount();
                                // index++;
                            }
                        }
                        if (!tokens[index].Equals(scanner.opend.endline))
                        {
                            adderror("Expected Endline Character");
                            index--;
                        }
                        //else
                        //{
                        index++;
                        linecount();
                        //}
                        result = Display;
                        //  ////MessageBox.Show(tokens[index].ToString());
                    }
                    else
                    {
                        result = null;
                        adderror("expected Variable or Display Statement");
                        index++;
                        linecount();

                        if (!tokens[index].Equals(scanner.opend.endline))
                        {
                            adderror("Expected Endline Character");
                            index--;
                            //index++;
                        }
                    }
                    counts++;
                }
                #endregion

                #region For vs and cs and register and int
                else if (tokens[index].ToString().Equals("vs") || tokens[index].ToString().Equals("cs") || tokens[index].ToString().Equals("register") || tokens[index].ToString().Equals("int") || tokens[index].ToString().Equals("string"))
                {
                    string dose = tokens[index].ToString();
                    index++;
                    linecount();

                    DeclareS sources = new DeclareS();
                    if (!(index < tokens.Count && tokens[index] is string))
                    {
                        adderror("expected variable name");
                        index++;
                        linecount();
                    }
                    else if (identifier.identity.Contains(tokens[index].ToString()))
                    {
                        adderror(tokens[index].ToString() + " : redefinition");
                        index++;
                        linecount();
                    }
                    else
                    {
                        sources.Ident = tokens[index].ToString();
                    }
                    index++;
                    linecount();

                    if ((index == tokens.Count) || (!(tokens[index].Equals((object)scanner.opend.equal)) && !(tokens[index].Equals(scanner.opend.endline))))
                    {
                        //////MessageBox.Show(tokens[index].ToString());
                        adderror("Expected #/=");
                        // index++;
                    }
                    #region var identifier
                    if (tokens[index].Equals((object)scanner.opend.endline))
                    {
                        Just_Declare classy = new Just_Declare();
                        classy.Ident = tokens[index - 1].ToString();
                        if (identifier.identity.Contains(tokens[index - 1].ToString()))
                        {
                            adderror(tokens[index - 1].ToString() + " : redefinition");
                            index++;
                            linecount();
                        }
                        identifier.identity.Add(classy.Ident.ToString());

                        identifier.assignment.Add(false);

                        result = classy;
                        index++;
                        linecount();
                    }
                    #endregion

                    else
                    {
                        index++;
                        linecount();

                        sources.Expr = ParsExpr("blah");
                        if (dose == "string")
                        {
                            //MessageBox.Show("hello world");
                            if (!(sources.Expr is StringLiteral))
                            {
                                adderror("expected string type");
                                index++;
                                sources = null;
                            }
                            else
                            {
                                //MessageBox.Show("lala");
                                identifier.identity.Add(sources.Ident.ToString());
                                identifier.assignment.Add(true);
                                MessageBox.Show("haha");
                                //index++;
                                MessageBox.Show(tokens[index].ToString());
                            }
                            if (!tokens[index].Equals(scanner.opend.endline))
                            {
                                //////MessageBox.Show(tokens[index].ToString());
                                adderror("Exepected Endline Character");
                                index--;
                            }
                            index++;
                            linecount();
                            result = sources;
                        }
                        else
                        {
                            if (sources.Expr is StringLiteral)
                            {
                                adderror("expected variable or integer after '=' ");
                                //index++;
                            }
                            else if (sources.Expr is Variable)
                            {
                                if (!identifier.identity.Contains(tokens[index - 1].ToString()))
                                {
                                    //////MessageBox.Show();
                                    adderror(tokens[index - 1].ToString() + " undeclared identifier");
                                    //  index++;
                                }

                                else if (identifier.assignment[identifier.identity.IndexOf(tokens[index - 1].ToString())] == false)
                                {
                                    adderror(tokens[index - 1].ToString() + " : unassigned");
                                    // index++;
                                }
                            }

                            identifier.identity.Add(sources.Ident.ToString());
                            identifier.assignment.Add(true);
                            if (!tokens[index].Equals(scanner.opend.endline))
                            {
                                //////MessageBox.Show(tokens[index].ToString());
                                adderror("Exepected Endline Character");
                                index--;
                            }
                            index++;
                            linecount();

                            result = sources;
                        }
                    }
                    counts++;
                }
                #endregion

                #region for Acquire
                else if (tokens[index].ToString().Equals("acquire"))
                {
                    index++;
                    linecount();
                    acquire acquire = new acquire();
                    if (index < tokens.Count && tokens[index] is string)
                    {
                        acquire.Ident = tokens[index].ToString();
                        ////MessageBox.Show(tokens[index].ToString());
                        if (!identifier.identity.Contains(acquire.Ident.ToString()))
                        {
                            adderror("Expected declared Identifier");
                            //index++;
                        }

                        result = acquire;
                        identifier.assignment[identifier.identity.IndexOf(tokens[index].ToString())] = true;
                        index++;
                        if (!tokens[index].Equals(scanner.opend.endline))
                        {
                            adderror("Expected Endline Character");
                            index--;
                            //index++;
                        }

                        linecount();
                    }
                    else
                    {
                        result = null;
                        adderror("Expected Identifier");
                    }
                    index++;
                    linecount();
                    counts++;
                }
                #endregion

                #region If and If Else
                else if (tokens[index].ToString().Equals("if"))
                {
                    bool ife = false;
                    index++;
                    linecount();
                    ifS    ifs    = new ifS();
                    ifElse ifelse = new ifElse();
                    ifs.Cond = ParseCond();
                    if (ifs.Cond is IntLiteral || ifs.Cond is Something || ifs.Cond is Variable)
                    {
                        adderror("Expected Conditional Statement");
                        //index++;
                    }
                    //index++;
                    if (index == tokens.Count || !(tokens[index].ToString().Equals("do")))
                    {
                        adderror("Expected do");
                        index--;
                    }
                    index++;
                    linecount();
                    ifs.Body = ParseStmt();
                    // ////MessageBox.Show(tokens[index].ToString() + " b4 else");
                    //index++;

                    #region ifelse
                    if (tokens[index].ToString().Equals("else"))
                    {
                        index++;
                        linecount();

                        ifelse.ifEverything = ifs;
                        if (index == tokens.Count || !(tokens[index].ToString().Equals("do")))
                        {
                            adderror("Expected do");
                            index--;
                        }
                        index++;
                        linecount();
                        ifelse.bodyelse = ParseStmt();
                        //index++;
                        if (index == tokens.Count || !(tokens[index].ToString().Equals("endelse")))
                        {
                            adderror("unterminated 'if else' body");
                            //index++;
                        }

                        ife = true;
                    }
                    #endregion
                    else if (index == tokens.Count || !(tokens[index].ToString().Equals("endif")))
                    {
                        result = null;
                        adderror("unterminated 'if' body");
                        index++;
                    }
                    if (!ife)
                    {
                        index++;
                        linecount();
                        if (index == tokens.Count || !(tokens[index].Equals((object)scanner.opend.endline)))
                        {
                            result = null;
                            adderror("Expected endline character #");
                            index--;
                        }
                        else
                        {
                            result = ifs;
                        }
                    }
                    else
                    {
                        index++;
                        linecount();
                        if (index == tokens.Count || !(tokens[index].Equals((object)scanner.opend.endline)))
                        {
                            result = null;
                            adderror("Expected endline character #");
                            index--;
                        }
                        else
                        {
                            result = ifelse;
                        }
                    }
                    index++;
                    linecount();
                    counts++;
                }
                #endregion

                #region While loop
                else if (tokens[index].ToString().Equals("while"))
                {
                    index++;
                    linecount();
                    whileLoop whilel = new whileLoop();
                    whilel.cond = ParseCond();
                    ////MessageBox.Show(tokens[index].ToString());
                    //index++;

                    if (index == tokens.Count || !(tokens[index].ToString().Equals("do")))
                    {
                        ////MessageBox.Show(tokens[index].ToString());
                        adderror("Expected do");
                        index--;
                    }
                    index++;
                    linecount();
                    //////MessageBox.Show(tokens[index].ToString());
                    whilel.body = ParseStmt();
                    ////MessageBox.Show(tokens[index].ToString());
                    //index++;
                    if (index == tokens.Count || !(tokens[index].ToString().Equals("endwhile")))
                    {
                        adderror("unterminated 'while' loop body");
                    }
                    index++;
                    linecount();
                    if (index == tokens.Count || !(tokens[index].Equals((object)scanner.opend.endline)))
                    {
                        adderror("Expected endline #");
                        index--;
                    }
                    result = whilel;
                    index++;
                    linecount();
                    counts++;
                    ////MessageBox.Show(tokens[index].ToString()+" in while");
                }
                #endregion

                #region Assignment
                else if (tokens[index] is string)
                {
                    assign assign = new assign();
                    if (!identifier.identity.Contains(tokens[index].ToString()))
                    {
                        adderror(tokens[index] + " undeclared identifier");
                    }

                    assign.Ident = tokens[index].ToString();
                    index++;
                    linecount();



                    if (tokens.Count == index || !(tokens[index].Equals((object)scanner.opend.equal)))
                    {
                        adderror("expected '='");
                    }
                    index++;
                    linecount();
                    assign.Expr = ParsExpr("blah");
                    if (assign.Expr is StringLiteral)
                    {
                        adderror("Expected integer/variable");
                    }
                    else if (assign.Expr is Variable)
                    {
                        if (!identifier.identity.Contains(tokens[index - 1].ToString()))
                        {
                            adderror(tokens[index - 1] + " : undeclared identifier");
                        }

                        else if (identifier.assignment[identifier.identity.IndexOf(tokens[index - 1].ToString())] == false)
                        {
                            adderror(tokens[index - 1].ToString() + " : unassigned");
                        }
                    }

                    result = assign;
                    if (index < tokens.Count)
                    {
                        if (tokens[index].ToString().Equals("#"))
                        {
                            adderror("Expected EndLine Character");
                            index--;
                        }
                    }
                    //index++;
                    counts++;
                }
                #endregion

                #region Invalid Statement

                else
                {
                    linecount();
                    adderror("parse error at token " + index + ": " + tokens[index]);
                    result = ParseStmt();
                }
                #endregion

                #region statement list

                //MessageBox.Show("b4 stmt_list");
                if ((index < tokens.Count) && (!(tokens[index].ToString().Equals("end"))))
                {
                    // index++;
                    if (((!tokens[index].ToString().Equals("endwhile") && !tokens[index].ToString().Equals("endif"))) && (!tokens[index].ToString().Equals("endelse") && !tokens[index].ToString().Equals("else")))
                    {
                        //MessageBox.Show("i m in stmt_list");
                        linecount();
                        //MessageBox.Show(tokens[index ].ToString());


                        sequence seq = new sequence();

                        seq.first  = result;
                        seq.second = ParseStmt();
                        result     = seq;
                    }
                }


                //}

                #endregion


                return(result);
            }
            else
            {
                return(null);
            }
        }