Skip to content

Commit

Permalink
Split out "cimple" parser out of tokstyle.
Browse files Browse the repository at this point in the history
Also, added support for some apidsl-like language. This will become
apidsl v2.
  • Loading branch information
iphydf committed Apr 10, 2020
1 parent a55656b commit 6161665
Show file tree
Hide file tree
Showing 35 changed files with 478 additions and 815 deletions.
16 changes: 13 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
/.stack-work
/stack.yaml.lock
# Build products.
/dist
/*.tix
/.*.pid
/.*.stamp

/.cabal-sandbox
/cabal.config
/cabal.sandbox.config
/dist
/.stack-work
/stack.yaml.lock

# Temporary files.
*~
*.swp
26 changes: 18 additions & 8 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,35 @@ language: generic
dist: xenial
os: linux

env: PACKAGE=tokstyle TARGET=x86_64-linux
env:
global:
# HACKAGE_USERNAME=[secure]
- secure: "zQfxfmcR9ZOlN2/9PsvPKuPQldhJbGskYtpUo50WW0n1qGUwEYbLZEs0S4Mt/7Dyp17z3JG0fYLX2CI6M/pOLSVgqwEmzlN2tqZ1mtstABQPzI2tx/s1E7Vj1424NW56Hl85W1ZDK2EhuDYhJn+E9Sd7h1p1GL+W4KQMwXeV9J0Q0MXD76R2aIPh85UmVIMtzCJwxm+xei2eag2TluytGQurqZWNtk2wB2734HcdJYhK36f7lZOhyg9ugFliHv7wAoSaAMqgkV9mLl9xa7E4MFahfpW5dMoitsrLJWAbrvPeekrtyxzlDhsvfESkyD4uzCOEHApvL0iqseQ2cRoDIOKCVnkGhMc4b/T68sLTrz5qxhqNXrTnsMI5Co+HVOym0fUT4vq1eluKfEaHmmR9w2Mnel7yi9oxn7inbGRAWdaLa6w+Q9bLjGgs7j8fUBpxRsBgMQJPzIyNoRtm+UD3WksDiIDRwXRwSS/09YcpK2lC5cEyi5hxeh8t0G5ft2j7/zkwXen+dZ2J3wVHjy5M5MteeBMk4dI/Uhkgtf7XDSVoZru2/3+RHlM5yMBa5OtV7vnKPQg4tktymRCzkWx57XSblWQ2cor6GL5GmIRfSTkUZuBfpfaaCZPXhyLHuBPGGCLN9gluCH0PZIq1f2wuGZV5iVzfBT3clhbepC6sw80="
# HACKAGE_PASSWORD=[secure]
- secure: "d1fxqa5o87mP2xnXkWdlXVKrIsz24ZfMEIUuc9m9GEHmZalmt8tlm//6PjC26Hu9IPRYIxFP5I7lYK0jija1xBHtwzR4lB9OZb86YuhSI6+upEgjOtrko9bM6uvSqaWCQAxjdJczpbVqVBPNEL02JDlG3GnBcOWDSCnWonLnMgwSHvmG7yxCe8VToR696hd6rr0bSLgWa0Ck17osqxHUg9S+QJ1xeNIorFBPleimhVyK9Agzk4a8GnNh5G7zoppt/Ti11l+mcHH0KwDWOHQ+nODRonpeWinVC5qvkc99IKyNgB66cS/UJOvTEdqC0xpozBSW8mTVu6MFW2GmR9I7wQHNEEctA7eTYDSoPJH4CKt3qL6XuNzsa6IxpG9z3q+/lxRqqXn/CPhi4xGSaqnqyAJhNEFe2kPYwY0w7WJEf93q/ougb+8kd0cwxKQrW94AvEKFU902NqHwUhbhP+O8JburMn8UjnBUXw9bNEQXGkD1MyUikK/KuzLMUC4CYEhFAE9TJgtYC8CYh8bPYGRJvr3fuzBjK+12MoeIYAQTcS+43RzK0OCb2chLC0f5137wq65m+20HhJ1ApmfMzjsh49D/SSQKEWriutm4mEHrBRyaSkTRyZMf13RgygS7Fz1X0Emt+F9rHgxNCDUfgjcP0rdsUn0B0Gb/ZRfrmA4fyKA="

cache:
timeout: 3
timeout: 600
directories:
- $HOME/.local
- $HOME/.stack

script:
- bash <(travis_retry curl -s https://raw.githubusercontent.com/TokTok/hs-tools/master/bin/travis-haskell) script
- ./expand_yacc.pl src/Tokstyle/Cimple/Parser.y src/Tokstyle/Cimple/Parser.y
- stack install
- tar zcf $PACKAGE-$TARGET-$TRAVIS_TAG.tar.gz -C $HOME/.local $(grep executable $PACKAGE.cabal | awk '{print "bin/"$2}')
- eval $(travis-haskell env)

deploy:
provider: releases
token:
secure: "o1WqCKpiHuNK/YLwfMZyCVJAVYWs4Yz+4P3khO6gU7xfjVZ7Pbv62xdUJH57lfBIpAiPKOTD0mVrX/anfjrgKR3Ecr05oAj6JEtgLJm8G8fx4YepWpjc9k1ZhPxSkMmo6f5Y41uIyQsxYXxqWjQ4A3cvkxKv0LehXfPfWeQQgFL6ywl2r5oahmdqXha+v5+af+Gqpnsc9Ji8MlA6AOWCyT8A4I6QEqUgSqOqjEIojvpDGZkUCesv84pUjZ5D6Ur/3olAZmP+1he6HCy/IqExhAZeJ7QG91/VBG2G1iOsIU7TeTGi0ssoEV//pk7r9sIYJqbfCXcXbt9yokURgxb1A9y+1SMAfXm60USOM7hZRfZE95rnrm36bi60usUrf4TcdnwqlrpAgH+GfcA1ykdDLC0ghZWn/gnOHMAKivJuGuz4em9UUwKFQzF3Vh2Ud7bIJW3D2MynNDXB190qI6/pzccXyn+3LSRL7mdBUdvtCetRhfsczLPfggfY/ydRUzVyKvyMO3PCAH93vtbwkPzCUhMpNH514mo1DP0k0vZbDY5u9gwnhs40CMGbU8POvboMZwrQ2rPpsvfBUoWasU+gAQeAUPq5fzcUEbo53PUAiH063kPNmgQTO8guyBwm+kK5kzeQuNx4g7Vbf7tYM1Kh2fE10SVH15n/EepAl8Db7JY="
file: $PACKAGE-$TARGET-$TRAVIS_TAG.tar.gz
secure: "QZ67vjK2QsINgCUqUTXoiOeQ+D3zpSpoSoIM1LC7EYbUMxfQyzdFP+MAy9nggV0mnY52AR3cCSr/gNv5ytWrLnV8dIF7ht32ekpr3jnv7D+Rb3NmgMQkLMI92cF5OP777EBWGALrYGtRqj/nkSElOKBtLeXb3JBaaRiQFecIsAxe1TrVNnlrZ59F1+hT4zoaWeu2VwovWHiO+bj1Qv6Z1KsyHNyHeEMvBhFzOLSRtvKBqr8JR/U08Y+5CbelxUxw/EPuTPribv2EHlHFIcx9/3MkVlpHgVC8UhyIgYoRXWDbgBeXePPBhCo0xw6eiJ7a9vLDPXK6nbcJkroSveTPRqrk5O2GYyEtQClKQ098aeB/yDIl2cHDgCO2U+gU8gxTBT5d8JgOMl7UlI3Z7I0GHTBX6gSLsiRxz44eoEsgi/9L9L2bFe3STZreEXMCqvELZnwUNjIkO6GfN3OmV/kr5GREnh12OfDiIB8vGWc7dFNUvks/l7XOuPB6U0VAf+yieuaoGstlDidJE+R/7rBLhV6cSyG2i25KMUN4bG6EZgm45CcQ0Rq5Q2uWLzB7pmY/4Jp6FWiLieqxJLs1EMwPnJ9dSGQw4Pxw8K3rSj7ed2mqFlfZdIVKLzxkv8Yp823MFCV7OECRoBTNWpX/ibC/294jnJn84hmdKrGmDScJF7M="
file: $PACKAGE-$VERSION.tar.gz
skip_cleanup: true
on:
repo: TokTok/hs-tokstyle
repo: TokTok/hs-cimple
tags: true

after_deploy: travis-haskell deploy

# Only build pull requests and releases, don't build master on pushes,
# except through api or cron.
if: type IN (pull_request, api, cron) OR tag IS present
56 changes: 44 additions & 12 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,67 @@ project()

alex_lexer(
name = "Lexer",
src = "src/Tokstyle/Cimple/Lexer.x",
src = "src/Language/Cimple/Lexer.x",
)

haskell_library(
name = "lexer",
srcs = [
"src/Language/Cimple/Lexer.hs",
"src/Language/Cimple/Tokens.hs",
],
src_strip_prefix = "src",
visibility = ["//hs-cimple:__subpackages__"],
deps = [
hazel_library("aeson"),
hazel_library("array"),
hazel_library("base"),
],
)

happy_parser(
name = "Parser",
src = "src/Tokstyle/Cimple/Parser.y",
src = "src/Language/Cimple/Parser.y",
preproc = "expand_yacc.pl",
)

haskell_library(
name = "hs-tokstyle",
srcs = glob(["src/**/*.*hs"]) + [
"src/Tokstyle/Cimple/Lexer.hs",
"src/Tokstyle/Cimple/Parser.hs",
name = "parser",
srcs = [
"src/Language/Cimple/AST.hs",
"src/Language/Cimple/Parser.hs",
],
src_strip_prefix = "src",
version = "0.0.5",
visibility = ["//hs-cimple:__subpackages__"],
deps = [
":lexer",
hazel_library("aeson"),
hazel_library("array"),
hazel_library("base"),
],
)

haskell_library(
name = "hs-cimple",
srcs = glob(
["src/**/*.*hs"],
exclude = [
"src/Language/Cimple/AST.hs",
"src/Language/Cimple/Tokens.hs",
],
),
src_strip_prefix = "src",
version = "0.0.1",
visibility = ["//visibility:public"],
deps = [
":lexer",
":parser",
hazel_library("aeson"),
hazel_library("array"),
hazel_library("base"),
hazel_library("bytestring"),
hazel_library("compact"),
hazel_library("containers"),
hazel_library("deepseq"),
hazel_library("filepath"),
hazel_library("groom"),
hazel_library("language-c"),
hazel_library("mtl"),
hazel_library("text"),
],
Expand All @@ -47,7 +79,7 @@ hspec_test(
name = "testsuite",
size = "small",
deps = [
":hs-tokstyle",
":hs-cimple",
hazel_library("base"),
hazel_library("hspec"),
],
Expand Down
1 change: 0 additions & 1 deletion Procfile

This file was deleted.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Tokstyle
# Haskell package: cimple

C style checker for TokTok projects.
Parser for a dialect of C including Apidsl.
17 changes: 0 additions & 17 deletions appveyor.yml

This file was deleted.

89 changes: 89 additions & 0 deletions cimple.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: cimple
version: 0.0.1
synopsis: Simple C-like programming language
homepage: https://toktok.github.io/
license: GPL-3
license-file: LICENSE
author: Iphigenia Df <[email protected]>
maintainer: Iphigenia Df <[email protected]>
copyright: Copyright (c) 2016-2020, Iphigenia Df
category: Data
stability: Experimental
cabal-version: >= 1.10
build-type: Simple
description:
Parser and AST for Cimple, a simple C-like programming language.

source-repository head
type: git
location: https://github.com/TokTok/hs-cimple

library
default-language: Haskell2010
hs-source-dirs:
src
ghc-options:
-Wall
build-tools: alex, happy
exposed-modules:
Language.Cimple
, Language.Cimple.Diagnostics
, Language.Cimple.IO
, Language.Cimple.TraverseAst
other-modules:
Language.Cimple.AST
, Language.Cimple.Lexer
, Language.Cimple.Parser
, Language.Cimple.Tokens
build-depends:
base < 5
, aeson
, array
, bytestring
, compact
, containers
, mtl
, text

executable dump-ast
default-language: Haskell2010
hs-source-dirs:
tools
ghc-options:
-Wall
main-is: dump-ast.hs
build-depends:
base < 5
, bytestring
, cimple
, groom
, text

executable dump-tokens
default-language: Haskell2010
hs-source-dirs:
tools
ghc-options:
-Wall
main-is: dump-tokens.hs
build-depends:
base < 5
, bytestring
, cimple
, groom
, text

test-suite testsuite
type: exitcode-stdio-1.0
default-language: Haskell2010
hs-source-dirs: test
main-is: testsuite.hs
other-modules:
Language.CimpleSpec
ghc-options:
-Wall
-fno-warn-unused-imports
build-depends:
base < 5
, cimple
, hspec
6 changes: 6 additions & 0 deletions src/Language/Cimple.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Language.Cimple (module X) where

import Language.Cimple.AST as X
import Language.Cimple.Lexer as X
import Language.Cimple.Parser as X
import Language.Cimple.Tokens as X
20 changes: 17 additions & 3 deletions src/Tokstyle/Cimple/AST.hs → src/Language/Cimple/AST.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
module Tokstyle.Cimple.AST
module Language.Cimple.AST
( AssignOp (..)
, BinaryOp (..)
, UnaryOp (..)
Expand Down Expand Up @@ -35,8 +35,11 @@ data Node lexeme
| Comment [Node lexeme]
| CommentBlock lexeme
| CommentWord lexeme
-- extern "C" block
| Commented (Node lexeme) (Node lexeme)
-- Namespace-like blocks
| ExternC [Node lexeme]
| Class Scope lexeme [Node lexeme] [Node lexeme]
| Namespace Scope lexeme [Node lexeme]
-- Statements
| CompoundStmt [Node lexeme]
| Break
Expand Down Expand Up @@ -74,8 +77,11 @@ data Node lexeme
| FunctionCall (Node lexeme) [Node lexeme]
| CommentExpr (Node lexeme) (Node lexeme)
-- Type definitions
| EnumClass lexeme [Node lexeme]
| EnumConsts (Maybe lexeme) [Node lexeme]
| EnumDecl lexeme [Node lexeme] lexeme
| Enumerator lexeme (Maybe (Node lexeme))
| ClassForward lexeme [Node lexeme]
| Typedef (Node lexeme) lexeme
| TypedefFunction (Node lexeme)
| Struct lexeme [Node lexeme]
Expand All @@ -86,12 +92,20 @@ data Node lexeme
| TyStruct lexeme
| TyFunc lexeme
| TyStd lexeme
| TyVar lexeme
| TyUserDefined lexeme
-- Functions
| FunctionDecl Scope (Node lexeme)
| FunctionDecl Scope (Node lexeme) (Maybe (Node lexeme))
| FunctionDefn Scope (Node lexeme) [Node lexeme]
| FunctionPrototype (Node lexeme) lexeme [Node lexeme]
| FunctionParam (Node lexeme) (Node lexeme)
| Event lexeme (Node lexeme)
| EventParams [Node lexeme]
| Property (Node lexeme) (Node lexeme) [Node lexeme]
| Accessor lexeme [Node lexeme] (Maybe (Node lexeme))
| ErrorDecl lexeme [Node lexeme]
| ErrorList [Node lexeme]
| ErrorFor lexeme
| Ellipsis
-- Constants
| ConstDecl (Node lexeme) lexeme
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{-# LANGUAGE OverloadedStrings #-}
module Tokstyle.Cimple.Diagnostics (Diagnostics, warn) where
module Language.Cimple.Diagnostics (Diagnostics, warn) where

import Control.Monad.State.Lazy (State)
import qualified Control.Monad.State.Lazy as State
import Data.Text (Text)
import qualified Data.Text as Text
import Tokstyle.Cimple.Lexer (Lexeme (..), lexemeLine)
import Language.Cimple.Lexer (Lexeme (..), lexemeLine)

type Diagnostics a = State [Text] a

Expand Down
8 changes: 4 additions & 4 deletions src/Tokstyle/Cimple/IO.hs → src/Language/Cimple/IO.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Tokstyle.Cimple.IO
module Language.Cimple.IO
( parseFile
, parseText
) where
Expand All @@ -11,9 +11,9 @@ import qualified Data.Map.Strict as Map
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import Tokstyle.Cimple.AST (Node (..))
import Tokstyle.Cimple.Lexer (Lexeme, runAlex)
import Tokstyle.Cimple.Parser (parseCimple)
import Language.Cimple.AST (Node (..))
import Language.Cimple.Lexer (Lexeme, runAlex)
import Language.Cimple.Parser (parseCimple)


type CompactState a = State (Map String Text) a
Expand Down
Loading

0 comments on commit 6161665

Please sign in to comment.