module Symantic.Parser.Machine ( module Symantic.Parser.Machine , module Symantic.Parser.Machine.Generate , module Symantic.Parser.Machine.Input , module Symantic.Parser.Machine.Instructions , module Symantic.Parser.Machine.Optimize , module Symantic.Parser.Machine.Program , module Symantic.Parser.Machine.View ) where import System.IO (IO) import Data.Function ((.)) import Symantic.Parser.Grammar import Symantic.Parser.Machine.Generate import Symantic.Parser.Machine.Input import Symantic.Parser.Machine.Instructions import Symantic.Parser.Machine.Optimize import Symantic.Parser.Machine.Program import Symantic.Parser.Machine.View -- * Type 'Machine' type Machine repr inp = Grammar (Program repr inp) -- | Build a 'Machine' able to 'generateCode' for the given 'Parser'. machine :: forall inp repr a. Grammarable (InputToken inp) (Program repr inp) => Machinable (InputToken inp) repr => Machine repr inp a -> IO (repr inp '[] a) machine = optimizeMachine . grammar @(InputToken inp)