Exemplo n.º 1
0
      private Parsen MaybeBinary(Parsen left, int myPrec)
      {
         var tok = _input.Peek( );

         if (IsOp(null))
         {
            var hisPrec = PRECENDENCE[(string)tok["value"]];
            if (hisPrec > myPrec)
            {
               _input.Next( );
               return MaybeBinary(
                  new Parsen( )
                     {
                     { "type", (string)tok["value"] == "=" || (string)tok["value"] == "->" ? "assign" : "binary"},
                     { "oper", (string)tok["value"]},
                     { "left", left },
                     { "right", MaybeBinary(ParseAtom( ), hisPrec) } }, myPrec
                  );
            }
         }
         return left;
      }
Exemplo n.º 2
0
      private Parsen ParseIf( )
      {
         SkipKw("if");
         var cond = ParseExpr( );
         if (!IsPunc('{'))
            throw new Exception( );

         var then = ParseExpr( );
         var ret = new Parsen( )
         {
            { "type", "if" },
            { "cond", cond },
            { "then", then }
         };
         
         if (IsKw("else"))
         {
            _input.Next( );
            ret["else"] = ParseExpr( );
         }

         return ret;
      }