Esempio n. 1
0
 public static StringBuilder AccessModifiers(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     switch (psr.GetNextTextOrEmpty())
     {
       case @"protected":
     sb.Append(psr.Consume());
     sb.Append(psr.SpaceToken());
     if (psr.GetNextTextOrEmpty() == @"internal")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
     }
     break;
       case @"public":
       case @"private":
       case @"internal":
     sb.Append(psr.Consume());
     sb.Append(psr.SpaceToken());
     break;
     }
     return sb;
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 2
0
 public static StringBuilder Attribute(Parser psr)
 {
     var sb = new StringBuilder();
       var status = psr.SaveStatus();
       try
       {
     if (psr.GetNextTextOrEmpty() == @"[")
     {
       sb.Append(psr.Consume());
       if (psr.GetNextTextOrEmpty(1) == @":")
       {
     switch (psr.GetNextTextOrEmpty())
     {
       case @"assembly":
       case @"module":
       case @"type":
       case @"field":
       case @"method":
       case @"event":
       case @"property":
       case @"param":
       case @"return":
         sb.Append(psr.Consume());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         break;
     }
       }
       while (psr.GetNextTextOrEmpty() != @"]")
       {
     sb.Append(Expr(psr));
     if (psr.GetNextTextOrEmpty() == @",")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
     }
     else if (psr.GetNextTextOrEmpty() != @"]")
     {
       throw new ResetException();
     }
       }
       if (psr.GetNextTextOrEmpty() == @"]")
       {
     sb.Append(psr.Consume());
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 3
0
 public static void Eq(ParseFunc[] pf, String input, String[] expect)
 {
     var psr = new Parser(Lexer.LexerString(input));
       var result = psr.Evalute(pf);
       var joinedExpect = @"";
       foreach (var line in expect)
       {
     joinedExpect += line + "\n";
       }
       Assert.AreEqual(result.Output, joinedExpect);
       Assert.True(result.Success);
 }
Esempio n. 4
0
 public void T_1()
 {
     var expr = @"a String 1 + 2 - 3;";
       var psr = new Parser(Lexer.LexerString(expr));
       var s1 = psr.SaveStatus();
       try
       {
     psr.Consume();
     ParserUtils.Type(psr);
     ParserUtils.Expr(psr);
       }
       catch (Exception)
       {
       }
       psr.LoadStatus(s1);
       var s2 = psr.SaveStatus();
       Assert.AreEqual(s1.ToString(), s2.ToString());
 }
Esempio n. 5
0
 public static StringBuilder AsIs(Parser psr)
 {
     var status = psr.SaveStatus();
       var sb = new StringBuilder();
       try
       {
     switch (psr.GetNextTextOrEmpty())
     {
       case @"as":
       case @"is":
     sb.Append(psr.SpaceToken());
     sb.Append(psr.Consume());
     sb.Append(psr.SpaceToken());
     sb.Append(Type(psr));
     return sb;
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 6
0
 private static StringBuilder Parentheses_Tuple(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen)
     {
       sb.Append(psr.Consume());
       if (psr.GetNextTextOrEmpty(1) != @"," && psr.GetNextTypeOrUnknown(1) != TokenType.ParenthesesClose)
       {
     sb.Append(Type(psr));
     sb.Append(psr.SpaceToken());
       }
       if (psr.GetNextTypeOrUnknown() == TokenType.Identifier)
       {
     sb.Append(psr.Consume());
     while (psr.GetNextTextOrEmpty() == @",")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       if (psr.GetNextTextOrEmpty(1) != @"," && psr.GetNextTypeOrUnknown(1) != TokenType.ParenthesesClose)
       {
         sb.Append(Type(psr));
         sb.Append(psr.SpaceToken());
       }
       if (psr.GetNextTypeOrUnknown() == TokenType.Identifier)
       {
         sb.Append(psr.Consume());
       }
     }
     if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose)
     {
       sb.Append(psr.Consume());
       return sb;
     }
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 7
0
        private static StringBuilder New(Parser psr)
        {
            var status = psr.SaveStatus();
              try
              {
            var sb = new StringBuilder();
            if (psr.GetNextTextOrEmpty() == @"new")
            {
              sb.Append(psr.Consume());

              if (psr.GetNextTextOrEmpty() == @"[")
              {
            sb.Append(SquareBrackets(psr));
            sb.Append(CurlyBrackets_Exprs(psr));
              }
              else
              {
            try
            {
              var t = Type(psr);
              sb.Append(psr.SpaceToken());
              sb.Append(t);
            }
            catch (ResetException)
            {
            }
            if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen)
            {
              sb.Append(FuncArgs(psr));
            }
            if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen)
            {
              sb.Append(CurlyBrackets_Exprs(psr));
            }
              }
              return sb;
            }
              }
              catch (ResetException)
              {
              }
              psr.LoadStatus(status);
              throw new ResetException();
        }
Esempio n. 8
0
 public static void EqExpr(String input, String expect)
 {
     var psr = new Parser(Lexer.LexerString(input));
       var result = ParserUtils.Expr(psr).ToString();
       Assert.AreEqual(result, expect);
 }
Esempio n. 9
0
 private static StringBuilder SquareBrackets(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     while (psr.GetNextTextOrEmpty() == @"[")
     {
       sb.Append(psr.Consume());
       if (psr.GetNextTextOrEmpty() != @"]")
       {
     sb.Append(ParserUtils.Expr(psr));
       }
       if (psr.GetNextTextOrEmpty() == @"]")
       {
     sb.Append(psr.Consume());
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 10
0
        private static StringBuilder Atom(Parser psr)
        {
            var status = psr.SaveStatus();
              try
              {
            var sb = new StringBuilder();
            switch (psr.GetNextTypeOrUnknown())
            {
              case TokenType.Keyword:
            switch (psr.GetNextTextOrEmpty())
            {
              case @"new":
                sb.Append(New(psr));
                break;
              case @"select":
              case @"from":
              case @"where":
              case @"join":
              case @"orderby":
              case @"group":
                sb.Append(Query(psr));
                break;
              default:
                throw new ResetException();
            }
            break;
              case TokenType.Number:
              case TokenType.Boolean:
              case TokenType.String:
              case TokenType.Char:
            sb.Append(psr.Consume());
            break;
              case TokenType.Identifier:
            sb.Append(psr.Consume());
            break;
              case TokenType.ParenthesesOpen:
            try
            {
              sb.Append(Parentheses_Tuple(psr));
            }
            catch (ResetException)
            {
              sb.Append(ExprWithParenthese(psr));
            }
            break;
              case TokenType.CurlyBracketOpen:
            sb.Append(CurlyBracket_Statements(psr));
            break;
              default:
            throw new ResetException();
            }

            while (true)
            {
              try
              {
            if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen)
            {
              sb.Append(FuncArgs(psr));
            }
            else if (psr.GetNextTextOrEmpty() == @"[")
            {
              sb.Append(SquareBrackets(psr));
            }
            else
            {
              break;
            }
              }
              catch (ResetException)
              {
            break;
              }
            }
            return sb;
              }
              catch (ResetException)
              {
              }
              psr.LoadStatus(status);
              throw new ResetException();
        }
Esempio n. 11
0
        public static StringBuilder _Expr(Parser psr)
        {
            var status = psr.SaveStatus();
              try
              {
            var sb = new StringBuilder();
            sb.Append(psr.SpaceToken());

            switch (psr.GetNextTextOrEmpty())
            {
              case @"!":
            switch (psr.GetNextTextOrEmpty(1))
            {
              case @"=":
                sb.Append(psr.Consume());
                sb.Append(psr.Consume());
                break;
            }
            break;

              case @"=":
            switch (psr.GetNextTextOrEmpty(1))
            {
              case @"=":
              case @">":
                sb.Append(psr.Consume());
                sb.Append(psr.Consume());
                break;
            }
            break;

              case @"-":
            sb.Append(psr.Consume());
            if (psr.GetNextTextOrEmpty() == @">")
            {
              sb.Append(psr.Consume());
            }
            break;

              case @"+":
              case @"*":
              case @"/":
              case @"%":
            sb.Append(psr.Consume());
            break;

              case @"|":
            sb.Append(psr.Consume());
            if (psr.GetNextTextOrEmpty() == @"|")
            {
              sb.Append(psr.Consume());
            }
            break;

              case @"&":
            sb.Append(psr.Consume());
            if (psr.GetNextTextOrEmpty() == @"&")
            {
              sb.Append(psr.Consume());
            }
            break;

              case @"<":
            sb.Append(psr.Consume());
            switch (psr.GetNextTextOrEmpty())
            {
              case @"<":
              case @"=":
                sb.Append(psr.Consume());
                break;
            }
            break;

              case @">":
            sb.Append(psr.Consume());
            switch (psr.GetNextTextOrEmpty())
            {
              case @">":
              case @"=":
                sb.Append(psr.Consume());
                break;
            }
            break;

              case @"?":
            switch (psr.GetNextTextOrEmpty(1))
            {
              case @"?":
              case @".":
                sb.Append(psr.Consume());
                sb.Append(psr.Consume());
                break;
            }
            break;

              default:
            throw new ResetException();
            }

            sb.Append(psr.SpaceToken());
            sb.Append(Term(psr));

            return sb;
              }
              catch (ResetException)
              {
              }
              psr.LoadStatus(status);
              throw new ResetException();
        }
Esempio n. 12
0
 public static StringBuilder Type(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     if (psr.GetNextTypeOrUnknown() == TokenType.Identifier)
     {
       sb.Append(psr.Consume());
       while (true)
       {
     if (psr.GetNextTextOrEmpty() == @".")
     {
       sb.Append(psr.Consume());
     }
     else
     {
       break;
     }
     if (psr.GetNextTypeOrUnknown() == TokenType.Identifier)
     {
       sb.Append(psr.Consume());
     }
     else
     {
       throw new ResetException();
     }
       }
     }
     else
     {
       throw new ResetException();
     }
     if (psr.GetNextTextOrEmpty() == @"<")
     {
       sb.Append(psr.Consume());
       if (psr.GetNextTextOrEmpty() != @">")
       {
     sb.Append(Type(psr));
     while (psr.GetNextTextOrEmpty() == @",")
     {
       var status2 = psr.SaveStatus();
       try
       {
         var sb2 = new StringBuilder();
         sb2.Append(psr.Consume());
         sb2.Append(psr.SpaceToken());
         sb2.Append(Type(psr));
         sb.Append(sb2);
       }
       catch (ResetException)
       {
         psr.LoadStatus(status2);
         break;
       }
     }
       }
       if (psr.GetNextTextOrEmpty() == @">")
       {
     sb.Append(psr.Consume());
       }
       else
       {
     throw new ResetException();
       }
     }
     if (psr.GetNextTextOrEmpty() == @"[" && psr.GetNextTextOrEmpty(1) == @"]")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.Consume());
     }
     if (psr.GetNextTextOrEmpty() == @"?")
     {
       sb.Append(psr.Consume());
     }
     return sb;
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 13
0
 public static StringBuilder RefOutIn(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     switch (psr.GetNextTextOrEmpty())
     {
       case @"ref":
       case @"out":
       case @"in":
     sb.Append(psr.Consume());
     sb.Append(psr.SpaceToken());
     break;
     }
     return sb;
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 14
0
        public static StringBuilder Expr(Parser psr)
        {
            var status = psr.SaveStatus();
              try
              {
            var sb = new StringBuilder();
            sb.Append(Term(psr));

            while (true)
            {
              try
              {
            sb.Append(_Expr(psr));
              }
              catch (ResetException)
              {
            break;
              }
            }

            try
            {
              sb.Append(ConditionalOprator(psr));
            }
            catch (ResetException)
            {
            }

            try
            {
              sb.Append(AsIs(psr));
            }
            catch (ResetException)
            {
            }

            return sb;
              }
              catch (ResetException)
              {
              }
              psr.LoadStatus(status);
              throw new ResetException();
        }
Esempio n. 15
0
 private static StringBuilder PostOperator(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     if (psr.GetNextTextOrEmpty() == @"+" && psr.GetNextTextOrEmpty(1) == @"+")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.Consume());
       return sb;
     }
     else if (psr.GetNextTextOrEmpty() == @"-" && psr.GetNextTextOrEmpty(1) == @"-")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.Consume());
       return sb;
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 16
0
 private static StringBuilder Query(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     var doExit = false;
     var n = 0;
     while (!doExit)
     {
       switch (psr.GetNextTextOrEmpty())
       {
     case @"let":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       if (psr.GetNextTypeOrUnknown() == TokenType.Identifier && psr.GetNextTextOrEmpty(1) == @"=")
       {
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
       }
       break;
     case @"where":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       break;
     case @"orderby":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       while (true)
       {
         sb.Append(Expr(psr));
         switch (psr.GetNextTextOrEmpty())
         {
           case @"desceding":
           case @"ascending":
             sb.Append(psr.SpaceToken());
             sb.Append(psr.Consume());
             break;
         }
         if (psr.GetNextTextOrEmpty() == @",")
         {
           sb.Append(psr.Consume());
           sb.Append(psr.SpaceToken());
         }
         else
         {
           break;
         }
       }
       break;
     case @"select":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @"into")
       {
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
       }
       break;
     case @"join":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @"in")
       {
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
         if (psr.GetNextTextOrEmpty() == @"on")
         {
           sb.Append(psr.SpaceToken());
           sb.Append(psr.Consume());
           sb.Append(psr.SpaceToken());
           sb.Append(Expr(psr));
           if (psr.GetNextTextOrEmpty() == @"equals")
           {
             sb.Append(psr.SpaceToken());
             sb.Append(psr.Consume());
             sb.Append(psr.SpaceToken());
             sb.Append(Expr(psr));
             if (psr.GetNextTextOrEmpty() == @"into")
             {
               sb.Append(psr.SpaceToken());
               sb.Append(psr.Consume());
               sb.Append(psr.SpaceToken());
               sb.Append(Expr(psr));
             }
           }
         }
       }
       break;
     case @"group":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @"by")
       {
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
         if (psr.GetNextTextOrEmpty() == @"into")
         {
           sb.Append(psr.SpaceToken());
           sb.Append(psr.Consume());
           sb.Append(psr.SpaceToken());
           sb.Append(Expr(psr));
         }
       }
       break;
     case @"from":
       if (0 < n)
       {
         sb.Append(psr.SpaceToken());
       }
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @"in")
       {
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
       }
       break;
     default:
       doExit = true;
       break;
       }
       n++;
     }
     return sb;
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 17
0
 private static StringBuilder CurlyBrackets_Exprs(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     while (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen)
     {
       sb.Append(psr.Consume());
       if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose)
       {
     sb.Append(psr.Consume());
     return sb;
       }
       else
       {
     sb.Append(psr.LineBreakToken());
     psr.IndentDown();
     while (psr.GetNextTypeOrUnknown() != TokenType.CurlyBracketClose)
     {
       sb.Append(psr.IndentToken(@"ParserUtils.CurlyBrackets_Exprs"));
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @"=")
       {
         sb.Append(psr.SpaceToken());
         sb.Append(psr.Consume());
         sb.Append(psr.SpaceToken());
         sb.Append(Expr(psr));
       }
       if (psr.GetNextTextOrEmpty() == @",")
       {
         sb.Append(psr.Consume());
       }
       sb.Append(psr.LineBreakToken());
     }
     if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose)
     {
       psr.IndentUp();
       sb.Append(psr.IndentToken(@"ParserUtils.CurlyBrackets_Exprs"));
       sb.Append(psr.Consume());
       return sb;
     }
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 18
0
 private static StringBuilder Term(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     try
     {
       sb.Append(Cast(psr));
     }
     catch (ResetException)
     {
     }
     switch (psr.GetNextTextOrEmpty())
     {
       case @"+":
       case @"-":
       case @"*":
       case @"&":
       case @"!":
       case @"~":
     sb.Append(psr.Consume());
     break;
     }
     sb.Append(Atom(psr));
     while (psr.GetNextTextOrEmpty() == @".")
     {
       var status2 = psr.SaveStatus();
       try
       {
     var sb2 = new StringBuilder();
     sb2.Append(psr.Consume());
     sb2.Append(Atom(psr));
     sb.Append(sb2);
       }
       catch (ResetException)
       {
     psr.LoadStatus(status2);
     break;
       }
     }
     try
     {
       sb.Append(PostOperator(psr));
     }
     catch (ResetException)
     {
     }
     return sb;
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 19
0
 private static StringBuilder CurlyBracket_Statements(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen)
     {
       sb.Append(psr.Consume());
       sb.Append(psr.LineBreakToken());
       psr.IndentDown();
       sb.Append(psr.DefaultManyStatement());
       if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose)
       {
     psr.IndentUp();
     sb.Append(psr.IndentToken(@"ParserUtils.CurlyBracket_Statements"));
     sb.Append(psr.Consume());
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 20
0
 private static StringBuilder ExprWithParenthese(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen)
     {
       sb.Append(psr.Consume());
       sb.Append(Expr(psr));
       if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose)
       {
     sb.Append(psr.Consume());
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 21
0
 private static StringBuilder FuncArgs(Parser psr)
 {
     var status = psr.SaveStatus();
       try
       {
     var sb = new StringBuilder();
     while (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen)
     {
       sb.Append(psr.Consume());
       while (psr.GetNextTypeOrUnknown() != TokenType.ParenthesesClose)
       {
     sb.Append(RefOutIn(psr));
     sb.Append(Expr(psr));
     if (psr.GetNextTextOrEmpty() == @"=")
     {
       sb.Append(psr.SpaceToken());
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(ParserUtils.Expr(psr));
     }
     if (psr.GetNextTextOrEmpty() == @",")
     {
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
     }
       }
       if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose)
       {
     sb.Append(psr.Consume());
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }
Esempio n. 22
0
        public static void Main(String[] args)
        {
            try
              {
            var showHelp = false;
            if (0 == args.Length)
            {
              showHelp = true;
            }
            else if (1 == args.Length)
            {
              switch (args[0])
              {
            case @"--help":
              showHelp = true;
              break;
              }
            }
            if (showHelp)
            {
              const String urlAppveyorSvg = @"https://ci.appveyor.com/api/projects/status/n000mdm0bj1pxd35/branch/master?svg=true";
              const String urlAppveyor = @"https://ci.appveyor.com/project/rbtnn/csharp-formatter/branch/master";
              const String urlTravisSvg = @"https://travis-ci.org/rbtnn/csharp-formatter.svg?branch=master";
              const String urlTravis = @"https://travis-ci.org/rbtnn/csharp-formatter";
              IO.PrintNormal(@"");
              IO.PrintYellow(@"# CSharp-Formatter");
              IO.PrintHide(String.Format(@"[![Build status]({0})]({1})", urlAppveyorSvg, urlAppveyor));
              IO.PrintHide(String.Format(@"[![Build status]({0})]({1})", urlTravisSvg, urlTravis));
              IO.PrintNormal(@"");
              IO.PrintNormal(@"This is a C# formatter tool without Visual Studio using .NET Framework's csc.exe.  ");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintGreen(@"## BUILD");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"__Windows__  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> MSBuild.exe msbuild.xml");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"__Mac__  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> xbuild msbuild.xml");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintGreen(@"## USAGE");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"__Windows__  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> .\bin\CSharpFormatter.exe {options} {.cs file}");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"__Mac__  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> mono ./bin/CSharpFormatter.exe {options} {.cs file}");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintGreen(@"## OPTIONS");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --tab");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Use tabs when indenting.  ");
              IO.PrintNormal(@"(default: __off__)  ");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --indent {count}");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Use {count} spaces per indent level.  ");
              IO.PrintNormal(@"(default: __2__)  ");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --encoding {encoding}");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Read {.cs file} by {encoding}. {encoding} is one of following encodings.  ");
              IO.PrintNormal(@"(default: __utf-8n__)  ");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"    cp932");
              IO.PrintNormal(@"    shift_jis");
              IO.PrintNormal(@"    utf-16");
              IO.PrintNormal(@"    iso-2022-jp");
              IO.PrintNormal(@"    euc-jp");
              IO.PrintNormal(@"    utf-7");
              IO.PrintNormal(@"    utf-8");
              IO.PrintNormal(@"    utf-8n");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --overwrite");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Do not print reformatted sources to standard output.  ");
              IO.PrintNormal(@"Overwrite {.cs file} By LF with CSharpFormatter's version.  ");
              IO.PrintNormal(@"(default: __off__)  ");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --crlf");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Overwrite {.cs file} by CRLF. --overwrite only.  ");
              IO.PrintNormal(@"(default: __off__)  ");
              IO.PrintNormal(@"");
              IO.PrintRed(@"### --debug");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Enable Debug mode.  ");
              IO.PrintNormal(@"(default: __off__)  ");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintGreen(@"## VIM PLUGIN");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Provide the following Vim command:  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> :CSFmt");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"This is to format C# codes in current buffer.  ");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"To install using Vundle, add the following to your vimrc:  ");
              IO.PrintNormal(@"");
              IO.PrintDarkGray(@"> :Plugin rbtnn/csharp-formatter");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"");
              IO.PrintGreen(@"## LICENSE");
              IO.PrintNormal(@"");
              IO.PrintNormal(@"Distributed under MIT License. See LICENSE.  ");
              IO.PrintNormal(@"");
            }
            else
            {
              var fis = new List<FormatterInfo>(){};
              var defaultFI = new FormatterInfo();
              Encoding enc = defaultFI.Enc;
              var indent = defaultFI.Indent;
              var useTab = defaultFI.UseTab;
              var overwrite = defaultFI.Overwrite;
              var crlf = defaultFI.Crlf;
              var sbkp = defaultFI.SpaceBetweenKeywordAndParan;
              var debugMode = defaultFI.DebugMode;

              var optionName = @"";
              foreach (var arg in args)
              {
            switch (arg)
            {
              case @"--overwrite":
                overwrite = true;
                break;
              case @"--indent":
                optionName = arg;
                break;
              case @"--tab":
                useTab = true;
                break;
              case @"--crlf":
                crlf = true;
                break;
              case @"--debug":
                debugMode = true;
                break;
              case @"--encoding":
                optionName = arg;
                break;
              default:
                switch (optionName)
                {
                  case @"":
                    if (IO.ExistsFile(arg))
                    {
                      fis.Add(new FormatterInfo(arg, enc, indent, useTab, overwrite, crlf, sbkp, debugMode));
                    }
                    else
                    {
                      throw new Exception(String.Format(@"No such file: '{0}'", arg));
                    }
                    break;
                  case @"--indent":
                    var temp = 0;
                    if (Int32.TryParse(arg, out temp))
                    {
                      indent = temp;
                    }
                    else
                    {
                      throw new Exception(String.Format(@"Invalid argument: '{0}'", arg));
                    }
                    break;
                  case @"--encoding":
                    switch (arg)
                    {
                      case @"cp932":
                      case @"shift_jis":
                        enc = Encoding.GetEncoding(932);
                        break;
                      case @"utf-16":
                        enc = Encoding.GetEncoding(1200);
                        break;
                      case @"iso-2022-jp":
                        enc = Encoding.GetEncoding(50222);
                        break;
                      case @"euc-jp":
                        enc = Encoding.GetEncoding(51932);
                        break;
                      case @"utf-7":
                        enc = Encoding.GetEncoding(65000);
                        break;
                      case @"utf-8":
                        enc = new UTF8Encoding(true);
                        break;
                      case @"utf-8n":
                        enc = new UTF8Encoding(false);
                        break;
                      default:
                        throw new Exception(String.Format(@"Invalid encoding: '{0}'", arg));
                    }
                    break;
                }
                optionName = @"";
                break;
            }
              }
              foreach (var fi in fis)
              {
            var ts = Lexer.LexerFile(fi);
            var psr = new Parser(ts, fi);
            var result = psr.Evalute();
            if (result.Success && fi.Overwrite)
            {
              if (fi.Crlf)
              {
                IO.WriteFileCRLF(fi.Path, result.Output, fi.Enc);
              }
              else
              {
                IO.WriteFileLF(fi.Path, result.Output, fi.Enc);
              }
            }
            else
            {
              IO.PrintRed(result.Output);
            }
              }
            }
              }
              catch (Exception ex)
              {
            IO.PrintRed(String.Format(@"{0}", ex.ToString()));
              }
        }
Esempio n. 23
0
 public static StringBuilder ConditionalOprator(Parser psr)
 {
     var status = psr.SaveStatus();
       var sb = new StringBuilder();
       try
       {
     if (psr.GetNextTextOrEmpty() == @"?")
     {
       sb.Append(psr.SpaceToken());
       sb.Append(psr.Consume());
       sb.Append(psr.SpaceToken());
       sb.Append(Expr(psr));
       if (psr.GetNextTextOrEmpty() == @":")
       {
     sb.Append(psr.SpaceToken());
     sb.Append(psr.Consume());
     sb.Append(psr.SpaceToken());
     sb.Append(Expr(psr));
     return sb;
       }
     }
       }
       catch (ResetException)
       {
       }
       psr.LoadStatus(status);
       throw new ResetException();
 }