From 2124075a0dc59ffb2ac53226d225c924e8e2afa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AE=80?= <2447746158@qq.com> Date: Fri, 13 Jan 2023 19:34:21 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E3=80=8C=E3=80=8D=20as=20an=20alternativ?= =?UTF-8?q?e=20of=20=E3=80=90=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\214\343\200\215\347\244\272\344\276\213.\345\205\245" | 4 ++++ src/Interp.hs | 7 +++++-- src/MonadicParse.hs | 6 ++++-- 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 "samples/\343\200\214\343\200\215\347\244\272\344\276\213.\345\205\245" diff --git "a/samples/\343\200\214\343\200\215\347\244\272\344\276\213.\345\205\245" "b/samples/\343\200\214\343\200\215\347\244\272\344\276\213.\345\205\245" new file mode 100644 index 0000000..5d4d638 --- /dev/null +++ "b/samples/\343\200\214\343\200\215\347\244\272\344\276\213.\345\205\245" @@ -0,0 +1,4 @@ +引「./libru/列.入」 + +以串为“你好,入语言!” +则串之「串印」 diff --git a/src/Interp.hs b/src/Interp.hs index 69dd821..668efb1 100644 --- a/src/Interp.hs +++ b/src/Interp.hs @@ -31,7 +31,10 @@ data InterpError deriving (Show) removeHeadTail :: String -> String -removeHeadTail str = Prelude.filter (/='】') (Prelude.filter (/='【') str) +removeHeadTail = Prelude.filter (/='】') . + Prelude.filter (/='」') . + Prelude.filter (/='【') . + Prelude.filter (/='「') interp :: InterpEnv -> Expr -> ExceptT InterpError IO Atom interp env (ExprValue val) = @@ -71,4 +74,4 @@ interp env (ExprInclude var expr) = do Right exp -> interp env $ injectHostFunctions hostFuncs exp runInterp :: Expr -> IO (Either InterpError Atom) -runInterp expr = runExceptT $ interp M.empty expr \ No newline at end of file +runInterp expr = runExceptT $ interp M.empty expr diff --git a/src/MonadicParse.hs b/src/MonadicParse.hs index ab19bd4..affffc3 100644 --- a/src/MonadicParse.hs +++ b/src/MonadicParse.hs @@ -9,7 +9,7 @@ import Text.Parsec.Language (haskellDef) import Text.Parsec.String (parseFromFile) ruChar :: Parsec String st Char -ruChar = noneOf "令时入之取者也以为并否则即元引【】" +ruChar = noneOf "令时入之取者也以为并否则即元引【】「」" ruWhiteSpace :: Parsec String st Char ruWhiteSpace = oneOf " \t\n、,:!?得。" @@ -23,7 +23,9 @@ concatParser [s] = s concatParser (s:xs) = fmap (++) s <*> concatParser xs variable :: Parsec String st AST.Variable -variable = try ( concatParser [ruString "【", many (noneOf "】"), ruString "】"] ) +variable = try ( concatParser [(try (ruString "「") >> pure "【") <|> try (ruString "【"), + many (noneOf "】」"), + (try (ruString "」") >> pure "】") <|> try (ruString "】")] ) <|> count 1 (ruChar) lexer = P.makeTokenParser haskellDef