Skip to content

Code from the book "Types and Programming Languages" in Scala

Notifications You must be signed in to change notification settings

ilya-klyuchnikov/tapl-scala

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TAPL in Scala

Roadmap

  1. tapl.arith - (chapters 3, 4).
  2. tapl.untyped (chapters 5-7).
  3. tapl.fulluntyped (chapters 5-7).
  4. tapl.tyarith (chapter 8).
  5. tapl.simplebool (chapter 10).
  6. tapl.fullsimple (chapter 9 and 11).
  7. tapl.fullref (chapter 13, 18)
  8. tapl.fullerror (chapter 14)
  9. tapl.rcdsubbot (chapter 15)
  10. tapl.fullsub (chapters 15-17)
  11. tapl.bot (chapter 16)
  12. tapl.fullequirec (chapter 20).
  13. tapl.fullisorec (chapter 20).
  14. tapl.equirec (chapter 21).
  15. tapl.recon (chapter 22).
  16. tapl.fullrecon (chapter 22).
  17. tapl.fullpoly (chapters 23, 24).
  18. tapl.fullomega (chapters 23, 29, 30).
  19. tapl.fullfsub (chapters 26, 28).
  20. tapl.fullfomsub (chapters 26, 31).
  21. tapl.fullfomsubref (chapter 27) combination of all systems from the book.

Code structure

The code structure for each implementation follows the original code structure and consists of 4 files:

  • syntax.scala - AST, contexts, commands, pretty-printing.
  • parser.scala - parsing.
  • core.scala - evaluator and typer.
  • demo.scala - the main application for processing input files.

Running

sbt
> run

Multiple main classes detected, select one to run:

 [1] tapl.fullisorec.FullIsorecDemo
 [2] tapl.rcdsubbot.RcdSubBotDemo
 [3] tapl.arith.ArithDemo
 [4] tapl.simplebool.SimpleBoolDemo
 [5] tapl.equirec.EquirecDemo
 [6] tapl.tyarith.TyArithDemo
 [7] tapl.untyped.UntypedDemo
 [8] tapl.fullfsub.FullFSubDemo
 [9] tapl.fullpoly.FullPolyDemo
 [10] tapl.recon.ReconDemo
 [11] tapl.fullfomsub.FullFomSubDemo
 [12] tapl.fullerror.FullErrorDemo
 [13] tapl.fulluntyped.UntypedDemo
 [14] tapl.fullsub.FullSubDemo
 [15] tapl.fullequirec.FullEquirecDemo
 [16] tapl.fullrecon.FullReconDemo
 [17] tapl.fullref.FullRefDemo
 [18] tapl.fullomega.FullOmegaDemo
 [19] tapl.fullsimple.FullSimpleDemo
 [20] tapl.fullfomsubref.FullFomSubRefDemo
 [21] tapl.bot.BotDemo

Enter number: 21

[info] Running tapl.bot.BotDemo
====================
(lambda x: Top. x): Top -> Top;
||
\/
(lambda x: Top. x): Top -> Top;
====================
((lambda x: Top. x) (lambda x: Top. x)): Top;
||
\/
(lambda x: Top. x): Top -> Top;
====================
((lambda x: Top -> Top. x) (lambda x: Top. x)): Top -> Top;
||
\/
(lambda x: Top. x): Top -> Top;
====================
(lambda x: Bot. x): Bot -> Bot;
||
\/
(lambda x: Bot. x): Bot -> Bot;
====================
(lambda x: Bot. x x): Bot -> Bot;
||
\/
(lambda x: Bot. x x): Bot -> Bot;

> run-main tapl.fulluntyped.UntypedDemo progs/fulluntyped.tapl
[info] Running tapl.fulluntyped.UntypedDemo progs/fulluntyped.tapl
====================
tru;
||
\/
(lambda t. lambda f. t);
====================
fls;
||
\/
(lambda t. lambda f. f);
====================
(tru tru);
||
\/
(lambda f. lambda t. lambda f'. t);
====================
(tru fls);
||
\/
(lambda f. lambda t. lambda f'. f');
====================
(test tru v w);
||
\/
((lambda m. lambda n. (lambda t. lambda f. t) m n) v w);
...

About

Code from the book "Types and Programming Languages" in Scala

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages