This commit is contained in:
dmitry 2021-02-26 13:57:36 +03:00
parent 9f80069615
commit d2676c8b14
15 changed files with 51 additions and 42 deletions

View File

@ -1,9 +1,13 @@
## sbt project compiled with Dotty
## Aquamarine HLL
### Usage
The high level language that compiles to AIR and some wrappers in the host language (e.g. TypeScript).
This is a normal sbt project, you can compile code with `sbt compile` and run it
with `sbt run`, `sbt console` will start a Dotty REPL.
### TODO
For more information on the sbt-dotty plugin, see the
[dotty-example-project](https://github.com/lampepfl/dotty-example-project/blob/master/README.md).
- Lambda
- Build data types: extend
- Platform-specific Predef with Return ability
- Implementation for abilities
- Abilities passing
- Print syntax errors better way
- For the offset, find a token

View File

@ -6,7 +6,7 @@ records[type]
arrays[type]
```
From lambda, we want to have a non-destructive transitions.
From lambda, we want to have non-destructive transitions.
Assume we have variables a...z in scope.

View File

@ -1,9 +1,9 @@
package aqua
import aqua.parse.{ArrowType, Block, DataType, Type}
import aqua.parser.{ArrowType, Block, DataType, Type}
import cats.data.NonEmptyMap
import cats.parse.{Parser P, Parser0 P0}
import aqua.parse.lift.Span
import aqua.parser.lift.Span
case class Aqua(
inputs: Map[String, DataType],
@ -13,7 +13,7 @@ case class Aqua(
)
object Aqua {
import aqua.parse.lexer.Token._
import aqua.parser.lexer.Token._
val `parser`: P0[List[Block[Span]]] = P.repSep0(Block.`block`[Span], ` \n*`)
}

View File

@ -1,10 +1,10 @@
package aqua.parse
package aqua.parser
import aqua.parse.DataType.{`customtypedef`, `datatypedef`}
import aqua.parse.lexer.Token._
import aqua.parse.Type.{`arrowdef`, `typedef`}
import aqua.parse.lift.LiftParser
import aqua.parse.lift.LiftParser._
import aqua.parser.DataType.{`customtypedef`, `datatypedef`}
import aqua.parser.lexer.Token._
import aqua.parser.Type.{`arrowdef`, `typedef`}
import aqua.parser.lift.LiftParser
import aqua.parser.lift.LiftParser._
import cats.Functor
import cats.data.{NonEmptyList, NonEmptyMap}
import cats.parse.{Parser => P}
@ -56,6 +56,7 @@ object DefService {
def `servicename`[F[_]: LiftParser]: P[F[String]] = `service` *> ` ` *> Name.lift <* ` `.? <* `:` <* ` \n*`
// TODO switch to funchead?
def `defservice`[F[_]: LiftParser]: P[DefService[F]] =
(`servicename` ~ indented(`funcdef`).map(_.toNem)).map {
case (n, f) DefService(n, f)
@ -74,6 +75,10 @@ object Block {
def block[F[_]: LiftParser: Functor]: P[Block[F]] =
` \n*`.rep0.with1 *> P.oneOf(
DefType.`deftype` :: DefService.`defservice` :: DefFunc.`deffunc` :: DefAlias.`defalias` :: Nil
DefType.`deftype` ::
DefService.`defservice` ::
DefFunc.`deffunc` ::
DefAlias.`defalias` ::
Nil
)
}

View File

@ -1,12 +1,12 @@
package aqua.parse
package aqua.parser
import aqua.parse.lexer.Token._
import aqua.parse.lexer.Value
import aqua.parser.lexer.Token._
import aqua.parser.lexer.Value
import cats.data.NonEmptyList
import cats.parse.{Parser P}
import aqua.parse.lexer.Value.`value`
import aqua.parse.lift.LiftParser
import aqua.parse.lift.LiftParser._
import aqua.parser.lexer.Value.`value`
import aqua.parser.lift.LiftParser
import aqua.parser.lift.LiftParser._
import cats.Functor
import cats.syntax.functor._

View File

@ -1,6 +1,6 @@
package aqua.parse
package aqua.parser
import aqua.parse.lexer.Token._
import aqua.parser.lexer.Token._
import cats.parse.{Parser P}
sealed trait Type

View File

@ -1,4 +1,4 @@
package aqua.parse.lexer
package aqua.parser.lexer
import cats.data.NonEmptyList
import cats.parse.{Accumulator0, Parser P, Parser0 P0}

View File

@ -1,7 +1,7 @@
package aqua.parse.lexer
package aqua.parser.lexer
import aqua.parse.BasicType
import aqua.parse.lexer.Token._
import aqua.parser.BasicType
import aqua.parser.lexer.Token._
import cats.parse.{Numbers, Parser P}
sealed trait Value

View File

@ -1,4 +1,4 @@
package aqua.parse.lift
package aqua.parser.lift
import cats.Id
import cats.parse.Parser

View File

@ -1,4 +1,4 @@
package aqua.parse.lift
package aqua.parser.lift
import cats.Comonad
import cats.parse.{Parser P}

View File

@ -1,11 +1,11 @@
package aqua.parse
package aqua.parser
import aqua.parse.lexer.{Literal, VarLambda}
import aqua.parser.lexer.{Literal, VarLambda}
import cats.data.NonEmptyList
import org.scalatest.EitherValues
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import aqua.parse.lift.LiftParser.Implicits.idLiftParser
import aqua.parser.lift.LiftParser.Implicits.idLiftParser
import cats.Id
class FuncOpSpec extends AnyFlatSpec with Matchers with EitherValues {

View File

@ -1,11 +1,11 @@
package aqua.parse
package aqua.parser
import aqua.parse.lexer.{Literal, VarLambda}
import aqua.parser.lexer.{Literal, VarLambda}
import cats.data.NonEmptyList
import org.scalatest.EitherValues
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import aqua.parse.lift.LiftParser.Implicits.idLiftParser
import aqua.parser.lift.LiftParser.Implicits.idLiftParser
import cats.Id
class FuncSpec extends AnyFlatSpec with Matchers with EitherValues {

View File

@ -1,4 +1,4 @@
package aqua.parse
package aqua.parser
import org.scalatest.EitherValues
import org.scalatest.flatspec.AnyFlatSpec

View File

@ -1,6 +1,6 @@
package aqua.parse.lexer
package aqua.parser.lexer
import aqua.parse.lexer.Token._
import aqua.parser.lexer.Token._
import org.scalatest.EitherValues
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

View File

@ -1,6 +1,6 @@
package aqua.parse.lexer
package aqua.parser.lexer
import aqua.parse.BasicType
import aqua.parser.BasicType
import org.scalatest.EitherValues
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers