Lseed validator program
[L-seed.git] / src / validate.hs
1 {- 
2  
3 Helper program: Expects a L-seed grammar on stdin and outputs its validity in JSON format:
4 $ echo "RULE is invalid" | ./validate 
5 {"valid":false,"line":1,"column":9,"msg":"\nunexpected \"i\"\nexpecting \"WHEN\", \"BRANCH\" or \"GROW\""}
6 $ echo "RULE trivial GROW BY 1" | ./validate 
7 {"valid":true}
8 -}
9
10 import Text.Parsec.Error
11 import Text.Parsec.Pos
12 import Lseed.Grammar.Parse
13 import Text.JSON
14
15 valid = encode $ makeObj [ ("valid", showJSON True) ]
16
17 invalid error = encode $ makeObj
18         [ ("valid", showJSON False)
19         , ("line",  showJSON . sourceLine .   errorPos $ error) 
20         , ("column",showJSON . sourceColumn . errorPos $ error) 
21         , ("msg",   showJSON .
22                     showErrorMessages "or" "unknown parse error"
23                                       "expecting" "unexpected" "end of input" .
24                     errorMessages $ error)
25         ]
26
27 main = do
28         file <- getContents
29         case parseGrammar "stdin" file of
30           Left error -> putStrLn $ invalid error
31           Right _ -> putStrLn valid