Skip to content

Commit

Permalink
Merge pull request #1 from adpextwindong/master
Browse files Browse the repository at this point in the history
Switch build process to Stack
  • Loading branch information
ccntrq authored Jan 8, 2022
2 parents d01d572 + 3d9872e commit 1d40f4e
Show file tree
Hide file tree
Showing 19 changed files with 186 additions and 58 deletions.
1 change: 0 additions & 1 deletion .build/.keep

This file was deleted.

4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
loxomotive
.build/*.hi
.build/*.o
.stack-work/
46 changes: 46 additions & 0 deletions Loxomotive.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
cabal-version: 2.4
name: Loxomotive
version: 0.1.0.0

author: Alexander Pankoff
license: MIT

extra-source-files:
README.md
CHANGELOG.md

executable loxomotive
main-is: Main.hs
hs-source-dirs:
app
build-depends:
base
,Loxomotive
,cond
,extra
default-language: Haskell2010

library
exposed-modules:
Loxomotive.Environment
Loxomotive.Expr
Loxomotive.Interpreter
Loxomotive.Object
Loxomotive.Parser
Loxomotive.Resolver
Loxomotive.Scanner
Loxomotive.Stmt
Loxomotive.Token
Loxomotive.TokenType
Loxomotive.Util

build-depends: base
,mtl
,cond
,monad-loops
,Stack
,extra
,containers

hs-source-dirs: src
default-language: Haskell2010
18 changes: 8 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,22 +33,20 @@ close as possible. I might refactor some of this later.

### Dependencies

To build and run the interpreter you will need a version of `ghc`. You will
also need some hakell libraries from hackage. These are:

- [mtl](https://hackage.haskell.org/package/mtl)
- [cond](https://hackage.haskell.org/package/cond)
- [monad-loops](https://hackage.haskell.org/package/monad-loops)
- [Stack](https://hackage.haskell.org/package/Stack)
- [extra](https://hackage.haskell.org/package/extra)
To build and run the interpreter you will need a version of [stack](haskellstack.org).

### Build

There is a little build script that helps building the interpreter. Run it with
`./make` and the binary will be output to `loxomotive`.
```
stack build
```

### Run

```
stack run -- [filename]
```

You can invoke `loxomotive` either with zero args to start the repl or with a
file to interpret that file

Expand Down
10 changes: 5 additions & 5 deletions Loxomotive.hs → app/Main.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
module Loxomotive where
module Main where

import Scanner
import Parser
import Resolver
import Interpreter
import Loxomotive.Scanner
import Loxomotive.Parser
import Loxomotive.Resolver
import Loxomotive.Interpreter

import System.IO
import System.Environment
Expand Down
2 changes: 0 additions & 2 deletions make

This file was deleted.

4 changes: 2 additions & 2 deletions src/Environment.hs → src/Loxomotive/Environment.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Environment where
module Loxomotive.Environment where

import Object
import Loxomotive.Object

import Control.Conditional (if')
import Data.Maybe
Expand Down
6 changes: 3 additions & 3 deletions src/Expr.hs → src/Loxomotive/Expr.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module Expr where
module Loxomotive.Expr where

import Object
import Token
import Loxomotive.Object
import Loxomotive.Token

data Expr
= Assign Token Expr
Expand Down
16 changes: 8 additions & 8 deletions src/Interpreter.hs → src/Loxomotive/Interpreter.hs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module Interpreter (interpret, initState, InterpreterState(..)) where

import qualified Environment as Env
import Expr
import Object
import Stmt
import Token
import TokenType
module Loxomotive.Interpreter (interpret, initState, InterpreterState(..)) where

import qualified Loxomotive.Environment as Env
import Loxomotive.Expr
import Loxomotive.Object
import Loxomotive.Stmt
import Loxomotive.Token
import Loxomotive.TokenType

import Control.Monad.Except
import Control.Monad.State
Expand Down
2 changes: 1 addition & 1 deletion src/Object.hs → src/Loxomotive/Object.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Object where
module Loxomotive.Object where

import Data.Map.Strict as Map

Expand Down
12 changes: 6 additions & 6 deletions src/Parser.hs → src/Loxomotive/Parser.hs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module Parser (parse, parseIO) where
module Loxomotive.Parser (parse, parseIO) where

import Expr
import Object
import Stmt
import Token
import TokenType
import Loxomotive.Expr
import Loxomotive.Object
import Loxomotive.Stmt
import Loxomotive.Token
import Loxomotive.TokenType

import Control.Conditional
import Control.Monad.Loops
Expand Down
8 changes: 4 additions & 4 deletions src/Resolver.hs → src/Loxomotive/Resolver.hs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module Resolver (resolve) where
module Loxomotive.Resolver (resolve) where

import Expr
import Stmt
import Token
import Loxomotive.Expr
import Loxomotive.Stmt
import Loxomotive.Token

import Control.Monad.Except
import Control.Monad.State
Expand Down
10 changes: 5 additions & 5 deletions src/Scanner.hs → src/Loxomotive/Scanner.hs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module Scanner (scan, scanIO) where
module Loxomotive.Scanner (scan, scanIO) where

import Util
import Loxomotive.Util

import Token
import TokenType
import Object
import Loxomotive.Token
import Loxomotive.TokenType
import Loxomotive.Object

import Control.Conditional

Expand Down
6 changes: 3 additions & 3 deletions src/Stmt.hs → src/Loxomotive/Stmt.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module Stmt where
module Loxomotive.Stmt where

import Expr
import Token
import Loxomotive.Expr
import Loxomotive.Token

data Stmt
= Block [Stmt]
Expand Down
6 changes: 3 additions & 3 deletions src/Token.hs → src/Loxomotive/Token.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module Token where
module Loxomotive.Token where

import TokenType
import Object
import Loxomotive.TokenType
import Loxomotive.Object

data Token = Token
{ t_type :: TokenType
Expand Down
2 changes: 1 addition & 1 deletion src/TokenType.hs → src/Loxomotive/TokenType.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module TokenType where
module Loxomotive.TokenType where

data TokenType
-- Single-character tokens.
Expand Down
2 changes: 1 addition & 1 deletion src/Util.hs → src/Loxomotive/Util.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Util where
module Loxomotive.Util where

slice :: Int -> Int -> [a] -> [a]
slice start end = take (end - start) . drop start
69 changes: 69 additions & 0 deletions stack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# This file was automatically generated by 'stack init'
#
# Some commonly used options have been documented as comments in this file.
# For advanced use and comprehensive documentation of the format, please see:
# https://docs.haskellstack.org/en/stable/yaml_configuration/

# Resolver to choose a 'specific' stackage snapshot or a compiler version.
# A snapshot resolver dictates the compiler version and the set of packages
# to be used for project dependencies. For example:
#
# resolver: lts-3.5
# resolver: nightly-2015-09-21
# resolver: ghc-7.10.2
#
# The location of a snapshot can be provided as a file or url. Stack assumes
# a snapshot provided as a file might change, whereas a url resource does not.
#
# resolver: ./custom-snapshot.yaml
# resolver: https://example.com/snapshots/2018-01-01.yaml
resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/30.yaml

# User packages to be built.
# Various formats can be used as shown in the example below.
#
# packages:
# - some-directory
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
# subdirs:
# - auto-update
# - wai
packages:
- .
# Dependency packages to be pulled from upstream that are not in the resolver.
# These entries can reference officially published versions as well as
# forks / in-progress versions pinned to a git hash. For example:
#
# extra-deps:
# - acme-missiles-0.3
# - git: https://github.com/commercialhaskell/stack.git
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
#
extra-deps:
- Stack-0.4.0@sha256:ada69a23ed9bbaf97260397f6b39b7a1f4e22a11bcac3fe2e8f23f1513f59fd8,1092


# Override default flag values for local packages and extra-deps
# flags: {}

# Extra package databases containing global packages
# extra-package-dbs: []

# Control whether we use the GHC we find on the path
# system-ghc: true
#
# Require a specific version of stack, using version ranges
# require-stack-version: -any # Default
# require-stack-version: ">=2.7"
#
# Override the architecture used by stack, especially useful on Windows
# arch: i386
# arch: x86_64
#
# Extra directories used by stack for building
# extra-include-dirs: [/path/to/dir]
# extra-lib-dirs: [/path/to/dir]
#
# Allow a newer minor version of GHC than the snapshot specifies
# compiler-check: newer-minor
20 changes: 20 additions & 0 deletions stack.yaml.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# This file was autogenerated by Stack.
# You should not edit this file by hand.
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files

packages:
- completed:
hackage: Stack-0.4.0@sha256:ada69a23ed9bbaf97260397f6b39b7a1f4e22a11bcac3fe2e8f23f1513f59fd8,1092
pantry-tree:
size: 355
sha256: 4a0e8d5c268b9d19cb472ac94f0e2291afbb899ce4f5878bbbe86effeba36c6f
original:
hackage: Stack-0.4.0@sha256:ada69a23ed9bbaf97260397f6b39b7a1f4e22a11bcac3fe2e8f23f1513f59fd8,1092
snapshots:
- completed:
size: 500539
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/30.yaml
sha256: 59ad6b944c9903847fecdc1d4815e8500c1f9999d80fd1b4d2d66e408faec44b
original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/30.yaml

0 comments on commit 1d40f4e

Please sign in to comment.