1
0
Prechádzať zdrojové kódy

removed 5.8.0 features so they wont show up for 5.7.0

LinaHirata 6 mesiacov pred
rodič
commit
f26a69c562
8 zmenil súbory, kde vykonal 14 pridanie a 283 odobranie
  1. 0 2
      QSParse/Ast.fs
  2. 13 61
      QSParse/Defines.fs
  3. 0 69
      QSParse/Parsec.fs
  4. 0 60
      QSParse/Show.fs
  5. 0 7
      QSParse/Tokens.fs
  6. 0 5
      QspServer/Program.fs
  7. 1 65
      Test/Test.fs
  8. 0 14
      Utility/Program.fs

+ 0 - 2
QSParse/Ast.fs

@@ -181,8 +181,6 @@ and Statement =
     | Proc of string * Expr list
     | If of Expr * PosStatement list * PosStatement list
     | Act of Expr list * PosStatement list
-    | For of var:Var * from:Expr * to':Expr * step:Expr option * body:PosStatement list
-    | Loop of preStmts:PosStatement list * Expr * step:PosStatement list * body:PosStatement list
     | Label of string
     | Comment of string
     | Exit

+ 13 - 61
QSParse/Defines.fs

@@ -938,15 +938,25 @@ let procedures =
         "killvar", dscr, funcs
         let dscr =
             [
-                "`COPYARR [$массив-приёмник],[$массив-источник]` - копирование содержимого массива в другой массив. Копируются как текстовые, так и числовые значения массива. Размер массива-приёмника при копировании не имеет значения. Примеры:"
+                "`COPYARR [$массив-приёмник],[$массив-источник],[#начало],[#количество]` - копирование в массив-приёмник [#количество] элементов из массива-источника начиная с элемента под номером [#начало]. Размер массива-приёмника при копировании не имеет значения. "
+                " - Параметр [#количество] является необязательным. По умолчанию - до конца массива-источника."
+                " - Параметр [#начало] является необязательным. По умолчанию - 0."
+                " - Не имеет значения, указываете ли вы $ перед названием массива или нет. Копируются элементы и со строковыми, и с числовыми значениями.  "
+                "Примеры:"
                 "```qsp"
                 "COPYARR '$a','$b'"
                 "COPYARR 'a','b'"
-                "COPYARR $arrname1,$arrname2"
+                "COPYARR $arrname1,$arrname2,10,5"
                 "COPYARR 'a<<$arrname1>>','a<<$arrname2>>'"
                 "```"
             ] |> String.concat "\n"
-        "copyarr", dscr, args [String; String]
+        let funcs =
+            [
+                [| String; String |], ()
+                [| String; String; Numeric |], ()
+                [| String; String; Numeric; Numeric |], ()
+            ] |> JustOverloads
+        "copyarr", dscr, funcs
         let dscr =
             [
                 "`CLEAR` или `CLR` - очистка окна пользователя."
@@ -1242,67 +1252,9 @@ let keywords =
             ] |> String.concat "\n"
         "set", dscr
         "let", dscr
-        let dscr =
-            [
-                "LOCAL [название переменной]=[выражение]"
-            ] |> String.concat "\n"
-        "local", dscr
         let dscr =
             [
                 "завершение выполнения текущего кода (преждевременный выход из подпрограммы / обработчика какого-либо события...)."
             ] |> String.concat "\n"
         "exit", dscr
-        let dscr =
-            [
-                "**FOR** `[#переменная]` **=** `[#выражение]` **TO** `[#выражение]`**:** `[операторы]` - Выполняет `[#операторы]` несколько раз, по очереди присваивая `[#переменной]` все численные значения от первого до второго `[#выражения]`."
-                ""
-                "Однострочная форма записи:"
-                "```qsp"
-                "for номер_нпц = 1 to количество_нпц: gs 'инициализировать нпц', номер_нпц"
-                "стоимость['меч'] = 10"
-                "стоимость['доспех'] = 250"
-                "стоимость['щит'] = 15"
-                "стоимость_снаряжения = 0"
-                "for номер_предмета = 0 to arrsize('стоимость')-1: стоимость_снаряжения += стоимость[номер предмета]"
-                "```"
-                ""
-                "Многострочная форма записи:"
-                "* После символа `:` ставится перенос строки"
-                "* Заканчивается FOR строкой `END`"
-                "* Допускается вложенность неограниченной глубины. Каждый уровень вложения должен заканчиваться своей строкой `END`."
-                "* Пример:"
-                "    ```qsp"
-                "    for i = 0 to arrsize('arr')-1:"
-                "        *pl arr[i]"
-                "        if arr[i] > 10:"
-                "            jump конец"
-                "        end"
-                "    end"
-                "    ```"
-                ""
-                "Можно еще задать шаг цикла, для этого используется **STEP**:"
-                "```qsp"
-                "for нечётные = 1 to 10 step 2: *pl нечётные"
-                "```"
-            ] |> String.concat "\n"
-        "for", dscr
-        "to", "**TO** — ключевое слово для конструкции FOR"
-        "step", "**STEP** — ключевое слово для конструкции FOR или LOOP"
-        let dscr =
-            [
-                "inline:"
-                ""
-                "```ebnf"
-                "'loop' [inlineStatements] 'while' expr ['step' inlineStatements]: statements"
-                "```"
-                "multiline:"
-                ""
-                "```ebnf"
-                "'loop' [inlineStatements] 'while' expr ['step' inlineStatements]:"
-                "    statements"
-                "'end'"
-                "```"
-            ] |> String.concat "\n"
-        "loop", dscr
-        "while", "**WHILE** — ключевое слово для конструкции LOOP"
     ]

+ 0 - 69
QSParse/Parsec.fs

@@ -86,13 +86,6 @@ let pAssign stmts =
         >>. (pstringVar VarHighlightKind.WriteAccess false
              <|> (pImplicitVarWhenAssign ident false |>> fun name -> NumericType, name))
         .>>? ws >>=? assign false
-    let pLocal =
-        appendToken Tokens.TokenType.Type
-            (pstringCI "local" .>>? notFollowedVarCont)
-        .>> ws
-        >>. (pstringVar VarHighlightKind.WriteAccess true
-             <|> (pImplicitVarWhenAssign ident true |>> fun name -> NumericType, name))
-        .>> ws >>=? assign true
     let pExplicitAssign =
         pstringVar VarHighlightKind.WriteAccess false
         .>>? ws >>=? assign false
@@ -103,7 +96,6 @@ let pAssign stmts =
             assign false (NumericType, name)
     choice
         [
-            pLocal
             pSetOrLet
             pExplicitAssign
             pImlicitAssign
@@ -295,46 +287,6 @@ let pstmt =
 
     let pcolonKeyword : _ Parser =
         appendToken Tokens.TokenType.Colon (pchar ':')
-    let pLoop =
-        let pInlineStmts =
-            many (notFollowedByString ":" >>. pstmt .>> ws .>> skipMany (ppunctuationTerminator .>> ws))
-
-        let pstmts = pstmts' pstmt
-
-        let pLoopHeader =
-            genKeywordParser Tokens.TokenType.Loop "loop"
-            >>. ws >>. pInlineStmts
-            .>> genKeywordParser Tokens.TokenType.While "while"
-            .>> ws .>>. pexpr
-            .>>. opt (updateScope (fun ss ->
-                          { ss with
-                              Scopes = Scope.appendScope ss.Scopes
-                          })
-                      >>? genKeywordParser Tokens.TokenType.Step "step"
-                      .>> ws >>. pInlineStmts
-                      .>> updateScope (fun ss ->
-                              { ss with
-                                  Scopes = Scope.removeScope ss.Scopes
-                              })
-                      )
-            .>> pcolonKeyword
-        let p =
-            pipe2
-                pLoopHeader
-                ((ws >>? skipNewline >>. spaces >>. pstmts .>> pendKeyword)
-                  <|> (spaces >>. pInlineStmts .>> optional pendKeyword))
-                (fun ((preStmts, expr), stepStmts) body ->
-                    let stepStmts = Option.defaultValue [] stepStmts
-                    Loop(preStmts, expr, stepStmts, body))
-        updateScope (fun ss ->
-            { ss with
-                Scopes = Scope.appendScope ss.Scopes
-            })
-        >>? p
-        .>> updateScope (fun ss ->
-                { ss with
-                    Scopes = Scope.removeScope ss.Scopes
-                })
     let pInlineStmts =
         updateScope (fun ss ->
             { ss with
@@ -384,25 +336,6 @@ let pstmt =
               <|> (spaces >>. pInlineStmts .>> optional pendKeyword))
             (fun expr body ->
                 Act(expr, body))
-    let pFor =
-        let pForHeader =
-            genKeywordParser Tokens.TokenType.For "for" >>. ws
-            >>. (pstringVar VarHighlightKind.WriteAccess false
-                 <|> (pImplicitVarWhenAssign ident false |>> fun name -> NumericType, name))
-            .>> ws .>> appendToken Tokens.TokenType.OperatorAssignment (pchar '=')
-            .>> ws .>>. pexpr
-            .>> genKeywordParser Tokens.TokenType.To "to"
-            .>> ws .>>. pexpr
-            .>>. opt (genKeywordParser Tokens.TokenType.Step "step"
-                      .>> ws >>. pexpr)
-            .>> pcolonKeyword
-
-        pipe2
-            pForHeader
-            ((ws >>? skipNewline >>. spaces >>. pstmts .>> pendKeyword)
-              <|> (spaces >>. pInlineStmts .>> optional pendKeyword))
-            (fun (((var, fromExpr), toExpr), stepExpr) body ->
-                For(var, fromExpr, toExpr, stepExpr, body))
     let pIf =
         let pifKeyword : _ Parser =
             genKeywordParser Tokens.TokenType.If "if"
@@ -465,8 +398,6 @@ let pstmt =
             psign
             pIf
             pAct
-            pFor
-            pLoop
             pAssign pstmts
             pcallProc
             notFollowedBy (pchar '-' >>. ws >>. (skipNewline <|> skipChar '-' <|> eof)) // `-` завершает локацию

+ 0 - 60
QSParse/Show.fs

@@ -174,7 +174,6 @@ let (|OneStmt|_|) = function
         | Act _ | If _ -> None
         | Label _ -> None // эту нечисть нужно как можно более нагляднее подчеркнуть. Да странно будет, если она окажется одна в списке инструкций.
         | Exit -> None // ¯\_(ツ)_/¯
-        | For _ | Loop _ -> None
     | _ -> None
 
 let (|AssingName|) = function AssignArr(x, _) -> x | AssignVar x -> x | AssignArrAppend x -> x
@@ -198,17 +197,7 @@ let showStmt indentsOption (formatConfig:FormatConfig) =
         let showAssign = showAssign showStmtsInline
         let showExpr = showExpr showStmtsInline
         let showStringLines = showStringLines showExpr showStmtsInline
-        let showLocal isLocal =
-            if isLocal then
-                showString "local" << showSpace
-            else id
         match stmt with
-        | Assign(isLocal, (AssingName name' as ass), Expr((Plus|Minus) as op, Var name, e)) when name' = name ->
-            [showLocal isLocal << showAssign ass << spaceBetween (ops op << showChar '=') << showExpr e]
-        | Assign(isLocal, (AssingName name' as ass), Expr((Plus|Minus) as op, e, Var name)) when name' = name ->
-            [showLocal isLocal << showAssign ass << spaceBetween (showChar '=' << ops op) << showExpr e]
-        | Assign(isLocal, ass, e) ->
-            [showLocal isLocal << showAssign ass << spaceBetween (showChar '=') << showExpr e]
         | Proc(name, [e]) when name.ToLower() = "*pl" ->
             if formatConfig.IsSplitStringPl then
                 match e with
@@ -289,32 +278,6 @@ let showStmt indentsOption (formatConfig:FormatConfig) =
                             (f' >> List.map ((<<) tabs))
                     yield showString "end"
             ]
-        | For(var, fromExpr, toExpr, stepExpr, body) ->
-            let header =
-                showString "for"
-                << showSpace << showVar var
-                << showSpace << showChar '='
-                << showSpace << showExpr fromExpr
-                << showSpace << showString "to"
-                << showSpace << showExpr toExpr
-                << (stepExpr
-                    |> Option.map (fun expr ->
-                        showSpace << showString "step"
-                        << showSpace << showExpr expr
-                    ) |> Option.defaultValue empty)
-                << showChar ':'
-            [
-                match body with
-                | OneStmt x ->
-                    yield header << showSpace << showStmtsInline [x]
-                | _ ->
-                    yield header
-                    yield!
-                        body
-                        |> List.collect
-                            (f' >> List.map ((<<) tabs))
-                    yield showString "end"
-            ]
         | Comment s -> [showChar '!' << showString s]
         | AssignCode(ass, stmts) ->
             let header = showAssign ass << spaceBetween (showChar '=') << showChar '{'
@@ -331,29 +294,6 @@ let showStmt indentsOption (formatConfig:FormatConfig) =
             ]
 
         | Exit -> [showString "exit"]
-        | Loop(preStmts, condExpr, step, body) ->
-            let header =
-                showString "loop"
-                << if List.isEmpty preStmts then id else showSpace << showStmtsInline preStmts
-                << showSpace << showString "while"
-                << showSpace << showExpr condExpr
-                << if List.isEmpty step then id
-                   else
-                    showSpace << showString "step"
-                    << showSpace << showStmtsInline step
-                << showChar ':'
-            [
-                match body with
-                | OneStmt x ->
-                    yield header << showSpace << showStmtsInline [x]
-                | _ ->
-                    yield header
-                    yield!
-                        body
-                        |> List.collect
-                            (f' >> List.map ((<<) tabs))
-                    yield showString "end"
-            ]
     f'
 
 let showLoc indentsOption isSplitStringPl (Location(name, statements)) : ShowS list =

+ 0 - 7
QSParse/Tokens.fs

@@ -13,13 +13,6 @@ type TokenType =
     | Underscore
     | Exit
 
-    | For
-    | To
-    | Step
-
-    | Loop
-    | While
-
     /// в TS `var` называется `storage.type.js`
     | Type
     | Keyword

+ 0 - 5
QspServer/Program.fs

@@ -80,11 +80,6 @@ module CommandResponse =
             | End
             | Underscore
             | Exit
-            | For
-            | To
-            | Step
-            | Loop
-            | While
             | SharpBeginLoc
             | MinusEndLoc -> "keywordControl"
             | BinaryOperator op ->

+ 1 - 65
Test/Test.fs

@@ -205,7 +205,7 @@ let assignTest =
                     "Error in Ln: 1 Col: 1"
                     "f(expr) = 42"
                     "^"
-                    "Expecting: '$', 'let' (case-insensitive), 'local' (case-insensitive) or 'set'"
+                    "Expecting: '$', 'let' (case-insensitive) or 'set'"
                     "(case-insensitive)"
                     ""
                     "The parser backtracked after:"
@@ -264,7 +264,6 @@ let StaticStmts x =
 let If(expr, thenBody, elseBody) =
     If(expr, emptyPoss thenBody, emptyPoss elseBody)
 let Act(exprs, thenBody) = Act(exprs, emptyPoss thenBody)
-let For(x, y, z, w, thenBody) = For(x, y, z, w, emptyPoss thenBody)
 
 let equalTwoPosStmt (note, stmt1, stmt2) =
     match stmt1, stmt2 with
@@ -707,69 +706,6 @@ let ifTests =
     ]
 
 [<Tests>]
-let forTests =
-    let runStmts str =
-        Qsp.Parser.Generic.runStateEither
-            Qsp.Parser.Main.pstmt
-            Qsp.Parser.Generic.emptyState str
-        |> snd
-    let runStmtsEof str =
-        Qsp.Parser.Generic.runStateEither
-            (Qsp.Parser.Main.pstmt .>> eof)
-            Qsp.Parser.Generic.emptyState str
-        |> snd
-    testList "forTests" [
-        testCase "multiline `for i = 4 + x to 45 / x + y:`" <| fun () ->
-            let input =
-                [
-                    "for i = 4 + x to 45 / x + y:"
-                    "    stmt"
-                    "end"
-                ] |> String.concat "\n"
-            let exp =
-              (For
-                 ((NumericType, "i"),
-                  Expr (Plus, Val (Int 4), Var (NumericType, "x")),
-                  Expr
-                    (Plus, Expr (Divide, Val (Int 45), Var (NumericType, "x")),
-                     Var (NumericType, "y")),
-                  None,
-                  [StarPl (Var (NumericType, "stmt"))]))
-            equalTwoPosStmt("", Right (emptyPos, exp), runStmtsEof input)
-        testCase "inline `for i = 4 + x to 45 / x + y: stmt`" <| fun () ->
-            let input =
-                [
-                    "for i = 4 + x to 45 / x + y: stmt"
-                    "'statement that not belong to construction'"
-                ] |> String.concat "\n"
-            let exp =
-              (For
-                 ((NumericType, "i"),
-                  Expr (Plus, Val (Int 4), Var (NumericType, "x")),
-                  Expr
-                    (Plus, Expr (Divide, Val (Int 45), Var (NumericType, "x")),
-                     Var (NumericType, "y")),
-                  None,
-                  [StarPl (Var (NumericType, "stmt"))]))
-            equalTwoPosStmt("", Right (emptyPos, exp), runStmts input)
-        testCase "inline `for i = 4 + x to 45 / x + y step x + 1: stmt`" <| fun () ->
-            let input =
-                [
-                    "for i = 4 + x to 45 / x + y step x + 1: stmt"
-                    "'statement that not belong to construction'"
-                ] |> String.concat "\n"
-            let exp =
-              (For
-                 ((NumericType, "i"),
-                  Expr (Plus, Val (Int 4), Var (NumericType, "x")),
-                  Expr
-                    (Plus, Expr (Divide, Val (Int 45), Var (NumericType, "x")),
-                     Var (NumericType, "y")),
-                  Some (Expr (Plus, Var (NumericType, "x"), Val (Int 1))),
-                  [StarPl (Var (NumericType, "stmt"))]))
-            equalTwoPosStmt("", Right (emptyPos, exp), runStmts input)
-    ]
-[<Tests>]
 let stmtTests =
     let runStmts str =
         Qsp.Parser.Generic.runStateEither

+ 0 - 14
Utility/Program.fs

@@ -167,20 +167,6 @@ let patternMatching pattern =
                     let acc = exprEqual acc expr
                     let acc = stmtsMatcher acc thenBody
                     stmtsMatcher acc elseBody
-                | For(var, from, to', step, body) ->
-                    let acc = exprEqual acc from
-                    let acc = exprEqual acc to'
-                    let acc =
-                        match step with
-                        | Some step ->
-                            exprEqual acc step
-                        | _ -> acc
-                    stmtsMatcher acc body
-                | Loop(preStmts, condExpr, step, body) ->
-                    let acc = stmtsMatcher acc preStmts
-                    let acc = exprEqual acc condExpr
-                    let acc = stmtsMatcher acc step
-                    stmtsMatcher acc body
                 | Label(_) -> acc
                 | Comment(_) -> acc
         ) acc