├── .gitignore ├── LICENSE.md ├── README.md ├── bin └── badger.dart ├── example ├── ack.badger ├── args.badger ├── assign.badger ├── astt.badger ├── async.badger ├── calls.badger ├── channels.badger ├── classes.badger ├── contexts.badger ├── defined.badger ├── demo.badger ├── events.badger ├── expressions.badger ├── fib.badger ├── fs.badger ├── functions.badger ├── greeting.badger ├── hello.badger ├── http_server.badger ├── if.badger ├── imports.badger ├── imports │ ├── a.badger │ ├── b.badger │ └── root.badger ├── js.badger ├── json.badger ├── loop_wait.badger ├── multi_assign.badger ├── namespaces.badger ├── native.badger ├── null.badger ├── numbers.badger ├── old │ ├── irc.badger │ └── irc2.badger ├── parens.badger ├── pi.badger ├── process.badger ├── range.badger ├── ranges.badger ├── references.badger ├── repl.badger ├── repos.badger ├── runtime.badger ├── select.badger ├── strings.badger ├── strinterop.badger ├── sugar.badger ├── switch.badger ├── tokens.badger ├── trailing_comma.badger ├── ui.badger ├── unicode.badger └── zen.badger ├── lib ├── common.dart ├── compiler.dart ├── eval.dart ├── io.dart ├── parser.dart └── src │ ├── common │ ├── collection.dart │ ├── environment.dart │ └── utils.dart │ ├── compiler │ ├── ast.dart │ ├── badger.dart │ ├── dart.dart │ ├── js.dart │ └── target.dart │ ├── eval │ ├── context.dart │ ├── evaluator.dart │ ├── library.dart │ └── utils.dart │ ├── io │ ├── environment.dart │ ├── fs.dart │ ├── http.dart │ ├── library.dart │ ├── process.dart │ ├── server.dart │ ├── socket.dart │ ├── stdio.dart │ └── utils.dart │ └── parser │ ├── ast.dart │ ├── builder.dart │ ├── diff.dart │ ├── grammar.dart │ ├── highlighter.dart │ ├── json.dart │ ├── modifier.dart │ ├── parser.dart │ ├── printer.dart │ ├── simplifier.dart │ ├── utils.dart │ └── visitor.dart ├── pubspec.yaml └── test ├── ast.dart ├── astgen.dart ├── benchmark.dart ├── bundle.dart ├── bundler.dart ├── complex_parse.dart ├── debug_parser.dart ├── differ.dart ├── edjson.dart ├── highlighter.dart ├── json_sane.dart ├── run.dart ├── scp.dart └── scripts ├── context.badger ├── functions.badger ├── hexadecimal.badger ├── maps.badger ├── numbers.badger ├── operators.badger ├── prototype └── records.badger └── ternary.badger /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | packages 3 | pubspec.lock 4 | .idea/ 5 | docs/ 6 | dartdoc-viewer/ 7 | .project 8 | .settings 9 | .buildlog 10 | .pub 11 | out/ 12 | *.iml 13 | .c9* 14 | .packages -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | ``` 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 DirectCode 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | ``` 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Badger 2 | 3 | *Notice*: Badger is being completely rewritten. 4 | 5 | Badger is an experimental programming language. 6 | It can be compiled to multiple languages or can be interpreted by the reference interpreter. 7 | 8 | ## Links 9 | 10 | - [Wiki](https://github.com/badger-lang/badger/wiki) 11 | - [Compiler Demo](http://badger.directcode.org/compiler.html) 12 | 13 | ## Example: 14 | 15 | ```js 16 | greet(name) { 17 | return "Hello $(name)" 18 | } 19 | 20 | let names = ["Kenneth", "Logan", "Sam", "Mike"] 21 | 22 | for name in names { 23 | print(greet(name)) 24 | } 25 | ``` 26 | 27 | ## Getting Started 28 | 29 | To install the badger interpreter, run the following command: 30 | 31 | ```bash 32 | pub global activate -sgit git://github.com/badger-lang/badger.git 33 | ``` 34 | 35 | To run an example, run the following command: 36 | 37 | ```bash 38 | badger example/greeting.badger 39 | ``` 40 | 41 | To compile to JavaScript, run the following command: 42 | 43 | ```bash 44 | badger --compile=js example/greeting.badger > hello.js 45 | ``` 46 | -------------------------------------------------------------------------------- /bin/badger.dart: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env dart 2 | 3 | import "dart:convert"; 4 | import "dart:io"; 5 | 6 | import "package:args/args.dart"; 7 | 8 | import "package:badger/io.dart"; 9 | import "package:badger/compiler.dart"; 10 | import "package:badger/eval.dart"; 11 | import "package:badger/common.dart"; 12 | 13 | import "package:crypto/crypto.dart"; 14 | 15 | Directory getHomeDirectory([String child]) => new Directory((Platform.isWindows 16 | ? Platform.environment["UserProfile"] 17 | : Platform.environment["HOME"]) + 18 | (child != null ? "${Platform.pathSeparator}${child}" : "")); 19 | 20 | CacheManager cache; 21 | 22 | File getHomeFile(String path) => new File((Platform.isWindows 23 | ? Platform.environment["UserProfile"] 24 | : Platform.environment["HOME"]) + 25 | "${Platform.pathSeparator}${path}"); 26 | 27 | main(List args) async { 28 | await loadPreferences(); 29 | await loadExternalCompilers(); 30 | 31 | cache = new CacheManager(); 32 | await cache.init(); 33 | 34 | var argp = new ArgParser(); 35 | argp.addFlag("test", 36 | negatable: false, 37 | abbr: "t", 38 | help: "Runs the script in a testing environment."); 39 | 40 | argp.addOption("compile", 41 | abbr: "c", 42 | allowed: ["tiny-ast", "ast", "js", "badger", "snapshot", "dart"] 43 | ..addAll(externalCompilers.map((it) => it.name).toList()), 44 | help: "Compiles Badger Code"); 45 | 46 | argp.addOption("define", 47 | abbr: "D", help: "Specifies an Runtime Property", allowMultiple: true); 48 | 49 | argp.addOption("compiler-opt", 50 | abbr: "O", help: "Specifies a Compiler Option", allowMultiple: true); 51 | 52 | argp.addFlag("verbose", abbr: "v", help: "Verbose Output"); 53 | 54 | var opts = argp.parse(args); 55 | 56 | if (opts.rest.isEmpty) { 57 | print("Usage: badger [options]