Skip to content

Commit 8b6d400

Browse files
authored
Merge pull request #36 from Tsukuba-Programming-Lab/develop
Release v0.1.0.0
2 parents 2506ee4 + 90ceab0 commit 8b6d400

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+2899
-59
lines changed

README.md

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,40 @@
1-
# Copager2(仮)
1+
# Ftpageh
2+
3+
## 記述例([app/src/Arithmetic.hs](./app/Arithmetic.hs)
4+
5+
```haskell
6+
main :: IO ()
7+
main = do
8+
input <- getLine
9+
result <- runProcessor mkProcessor input
10+
case result of
11+
Right sexp -> print sexp
12+
Left err -> putStrLn $ "error: " ++ show err
13+
14+
mkProcessor :: ProcessorT IO ArithmeticToken ArithmeticRule (SExp _ _)
15+
mkProcessor = ProcessorT $ do
16+
token <- lex
17+
events <- parse token
18+
consume events
19+
20+
```
21+
22+
## Library
23+
24+
- [Copager2](./lib/copager2/) : Copager2 本体
25+
- [ErrHandling](./lib/err_handling/) : エラーハンドリング用ライブラリ
26+
- [Language](./lib/language/) : 言語定義ライブラリ
27+
28+
## Example
29+
30+
### 普通のパーサ
31+
32+
- [lang-arithmetic](./app/lang/src/Arithmetic.hs) : 四則演算
33+
- [lang-json](./app/lang/src/json.hs) : JSON
34+
- [lang-pl0](./app/lang/src/Pl0.hs) : Pl/0
35+
- [lang-xml](./app/lang/src/Xml.hs) : Xml
36+
37+
### エラーハンドリング
38+
39+
- [errh-panicmode](./app/errh/src/PanicMode.hs) : パニックモード
40+
- [errh-corchuelo](./app/errh/src/Corchuelo.hs) : Corchuelo (※)

app/Main.hs

Lines changed: 0 additions & 8 deletions
This file was deleted.

app/errh/errh.cabal

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
cabal-version: 3.0
2+
name: errh
3+
version: 0.1.0.0
4+
author: NakagamiYuta
5+
maintainer: guguru0014@gmail.com
6+
build-type: Simple
7+
8+
executable errh-panicmode
9+
main-is: PanicMode.hs
10+
hs-source-dirs: src
11+
build-depends:
12+
base,
13+
mtl,
14+
ftpageh,
15+
language,
16+
err-handling,
17+
18+
executable errh-corchuelo
19+
main-is: Corchuelo.hs
20+
hs-source-dirs: src
21+
build-depends:
22+
base,
23+
mtl,
24+
ftpageh,
25+
language,
26+
err-handling,

app/errh/src/Corchuelo.hs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Prelude hiding (lex)
2+
3+
import Control.Monad.State (lift)
4+
5+
import Ftpageh.Prelude
6+
import Ftpageh.Core.Process (foldProcess)
7+
import Ftpageh.Core.Progress (Progress(..))
8+
import Ftpageh.Lex.RegexLex (lex)
9+
import Ftpageh.Parse (Event(..))
10+
import Ftpageh.Parse.LR.Common.Driver (parse)
11+
import Ftpageh.IR.Void (Void, build, feed)
12+
13+
import ErrHandling.Core (recover)
14+
import ErrHandling.Corchuelo (corchuelo)
15+
import Language.Arithmetic (ArithmeticToken, ArithmeticRule(..))
16+
17+
main :: IO ()
18+
main = do
19+
input <- getLine
20+
result <- runProcessor mkProcessor input
21+
case result of
22+
Right sexp -> putStrLn "Accept"
23+
Left err -> putStrLn $ "error: " ++ show err
24+
25+
mkProcessor :: ProcessorT IO ArithmeticToken ArithmeticRule Void
26+
mkProcessor = ProcessorT $ do
27+
token <- lex
28+
events <- parse token
29+
foldProcess events $ \event ->
30+
case event of
31+
Accept -> build
32+
Error err -> do
33+
lift $ putStrLn $ "recover: " ++ show err
34+
recover corchuelo
35+
_ -> do
36+
feed event
37+
return Continue

app/errh/src/PanicMode.hs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Prelude hiding (lex)
2+
3+
import Control.Monad.State (lift)
4+
5+
import Ftpageh.Prelude
6+
import Ftpageh.Core.Process (foldProcess)
7+
import Ftpageh.Core.Progress (Progress(..))
8+
import Ftpageh.Lex.RegexLex (lex)
9+
import Ftpageh.Parse (Event(..))
10+
import Ftpageh.Parse.LR.Common.Driver (parse)
11+
import Ftpageh.IR.Void (Void, build, feed)
12+
13+
import ErrHandling.Core (recover)
14+
import ErrHandling.PanicMode (panicMode)
15+
import Language.Arithmetic (ArithmeticToken, ArithmeticRule(..))
16+
17+
main :: IO ()
18+
main = do
19+
input <- getLine
20+
result <- runProcessor mkProcessor input
21+
case result of
22+
Right sexp -> putStrLn "Accept"
23+
Left err -> putStrLn $ "error: " ++ show err
24+
25+
mkProcessor :: ProcessorT IO ArithmeticToken ArithmeticRule Void
26+
mkProcessor = ProcessorT $ do
27+
token <- lex
28+
events <- parse token
29+
foldProcess events $ \event ->
30+
case event of
31+
Accept -> build
32+
Error err -> do
33+
lift $ putStrLn $ "recover: " ++ show err
34+
recover $ panicMode [Number]
35+
_ -> do
36+
feed event
37+
return Continue

app/lang/lang.cabal

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
cabal-version: 3.0
2+
name: lang
3+
version: 0.1.0.0
4+
author: NakagamiYuta
5+
maintainer: guguru0014@gmail.com
6+
build-type: Simple
7+
8+
executable lang-arithmetic
9+
main-is: Arithmetic.hs
10+
hs-source-dirs: src
11+
build-depends:
12+
base,
13+
mtl,
14+
ftpageh,
15+
language,
16+
17+
executable lang-json
18+
main-is: Json.hs
19+
hs-source-dirs: src
20+
build-depends:
21+
base,
22+
mtl,
23+
ftpageh,
24+
language,
25+
26+
executable lang-pl0
27+
main-is: Pl0.hs
28+
hs-source-dirs: src
29+
build-depends:
30+
base,
31+
mtl,
32+
ftpageh,
33+
language,
34+
35+
executable lang-xml
36+
main-is: Xml.hs
37+
hs-source-dirs: src
38+
build-depends:
39+
base,
40+
mtl,
41+
ftpageh,
42+
language,

app/lang/src/Arithmetic.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{-# LANGUAGE PartialTypeSignatures #-}
2+
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
3+
4+
import Prelude hiding (lex)
5+
6+
import Ftpageh.Prelude
7+
import Ftpageh.Lex.RegexLex (lex)
8+
import Ftpageh.Parse.LR.Common.Driver (parse)
9+
import Ftpageh.IR.SExp (SExp, consume)
10+
11+
import Language.Arithmetic (ArithmeticToken, ArithmeticRule)
12+
13+
main :: IO ()
14+
main = do
15+
input <- getLine
16+
result <- runProcessor mkProcessor input
17+
case result of
18+
Right sexp -> print sexp
19+
Left err -> putStrLn $ "error: " ++ show err
20+
21+
mkProcessor :: ProcessorT IO ArithmeticToken ArithmeticRule (SExp _ _)
22+
mkProcessor = ProcessorT $ do
23+
token <- lex
24+
events <- parse token
25+
consume events

app/lang/src/Json.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{-# LANGUAGE PartialTypeSignatures #-}
2+
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
3+
4+
import Prelude hiding (lex)
5+
6+
import Ftpageh.Prelude
7+
import Ftpageh.Lex.RegexLex (lex)
8+
import Ftpageh.Parse.LR.Common.Driver (parse)
9+
import Ftpageh.IR.SExp (SExp, consume)
10+
11+
import Language.Json (JsonToken, JsonRule)
12+
13+
main :: IO ()
14+
main = do
15+
input <- getLine
16+
result <- runProcessor mkProcessor input
17+
case result of
18+
Right sexp -> print sexp
19+
Left err -> putStrLn $ "error: " ++ show err
20+
21+
mkProcessor :: ProcessorT IO JsonToken JsonRule (SExp _ _)
22+
mkProcessor = ProcessorT $ do
23+
token <- lex
24+
events <- parse token
25+
consume events

app/lang/src/Pl0.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{-# LANGUAGE PartialTypeSignatures #-}
2+
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
3+
4+
import Prelude hiding (lex)
5+
6+
import Ftpageh.Prelude
7+
import Ftpageh.Lex.RegexLex (lex)
8+
import Ftpageh.Parse.LR.Common.Driver (parse)
9+
import Ftpageh.IR.SExp (SExp, consume)
10+
11+
import Language.Pl0 (Pl0Token, Pl0Rule)
12+
13+
main :: IO ()
14+
main = do
15+
input <- getLine
16+
result <- runProcessor mkProcessor input
17+
case result of
18+
Right sexp -> print sexp
19+
Left err -> putStrLn $ "error: " ++ show err
20+
21+
mkProcessor :: ProcessorT IO Pl0Token Pl0Rule (SExp _ _)
22+
mkProcessor = ProcessorT $ do
23+
token <- lex
24+
events <- parse token
25+
consume events

app/lang/src/Xml.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{-# LANGUAGE PartialTypeSignatures #-}
2+
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
3+
4+
import Prelude hiding (lex)
5+
6+
import Ftpageh.Prelude
7+
import Ftpageh.Lex.RegexLex (lex)
8+
import Ftpageh.Parse.LR.Common.Driver (parse)
9+
import Ftpageh.IR.SExp (SExp, consume)
10+
11+
import Language.Xml (XmlToken, XmlRule)
12+
13+
main :: IO ()
14+
main = do
15+
input <- getLine
16+
result <- runProcessor mkProcessor input
17+
case result of
18+
Right sexp -> print sexp
19+
Left err -> putStrLn $ "error: " ++ show err
20+
21+
mkProcessor :: ProcessorT IO XmlToken XmlRule (SExp _ _)
22+
mkProcessor = ProcessorT $ do
23+
token <- lex
24+
events <- parse token
25+
consume events

0 commit comments

Comments
 (0)