summaryrefslogtreecommitdiff
path: root/src/PGF.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-10-14 08:00:50 +0000
committerkrasimir <krasimir@chalmers.se>2008-10-14 08:00:50 +0000
commit4573d104425a79b8b00ebcccb2e94c62275285ea (patch)
treed8a7f902baf5246367c048aeb201dd9e3486d1b0 /src/PGF.hs
parent0c66ad597db65fcddc8a425f0bce4beedf2aae33 (diff)
the new optimized incremental parser and the common subexpression elimination optimization in PMCFG
Diffstat (limited to 'src/PGF.hs')
-rw-r--r--src/PGF.hs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/PGF.hs b/src/PGF.hs
index c078bf3bf..347b52ccc 100644
--- a/src/PGF.hs
+++ b/src/PGF.hs
@@ -77,6 +77,7 @@ import Data.Char
import qualified Data.Map as Map
import Data.Maybe
import System.Random (newStdGen)
+import Control.Monad
---------------------------------------------------
-- Interface
@@ -211,7 +212,7 @@ parse pgf lang cat s =
Just cnc -> case parser cnc of
Just pinfo -> if Map.lookup (mkCId "erasing") (cflags cnc) == Just "on"
then Incremental.parse pinfo (mkCId cat) (words s)
- else case parseFCFG "bottomup" pinfo (mkCId cat) (words s) of
+ else case parseFCFG "topdown" pinfo (mkCId cat) (words s) of
Ok x -> x
Bad s -> error s
Nothing -> error ("No parser built for language: " ++ lang)
@@ -259,9 +260,10 @@ startCat pgf = lookStartCat pgf
complete pgf from cat input =
let (ws,prefix) = tokensAndPrefix input
state0 = initState pgf from cat
- state = foldl Incremental.nextState state0 ws
- compls = Incremental.getCompletions state prefix
- in [unwords (ws++[c]) ++ " " | c <- Map.keys compls]
+ in case foldM Incremental.nextState state0 ws of
+ Nothing -> []
+ Just state -> let compls = Incremental.getCompletions state prefix
+ in [unwords (ws++[c]) ++ " " | c <- Map.keys compls]
where
tokensAndPrefix :: String -> ([String],String)
tokensAndPrefix s | not (null s) && isSpace (last s) = (words s, "")