eol = eol_helper;
comment = '#' any* eol_helper;
-kwpackage = 'package';
+kwmodule = 'package'|'module';
kwimport = 'import';
kwclass = 'class';
kwabstract = 'abstract';
ne = '!=';
lt = '<';
le = '<=';
+ll = '<<';
gt = '>';
ge = '>=';
+gg = '>>';
starship = '<=>';
bang='!';
/* MODULES *******************************************************************/
module
- = packagedecl? [imports]:import* [classdefs]:classdef* implicit_top_class? implicit_main_class? {-> New module(packagedecl, [imports.import],[classdefs.classdef,implicit_top_class.classdef,implicit_main_class.classdef])};
+ = moduledecl? [imports]:import* [classdefs]:classdef* implicit_top_class? implicit_main_class? {-> New module(moduledecl, [imports.import],[classdefs.classdef,implicit_top_class.classdef,implicit_main_class.classdef])};
-packagedecl
- = [doc]:no kwpackage no id [n2]:n1 {-> New packagedecl(doc.doc, kwpackage, id)};
+moduledecl
+ = [doc]:no kwmodule no id [n2]:n1 {-> New moduledecl(doc.doc, kwmodule, id)};
import
= {std} [doc]:no visibility kwimport no id [n2]:n1 {-> New import.std(visibility, kwimport, id)}
| {ge} ge {-> New methid.ge(ge)}
| {lt} lt {-> New methid.lt(lt)}
| {gt} gt {-> New methid.gt(gt)}
+ | {ll} ll {-> New methid.ll(ll)}
+ | {gg} gg {-> New methid.gg(gg)}
| {bra} obra cbra {-> New methid.bra(obra, cbra)}
| {starship} starship {-> New methid.starship(starship)}
| {assign} id assign {-> New methid.assign(id, assign)}
| {ne} expr_add~nopar~nobra ne no [expr2]:expr_add~nopar~nobra {-> New expr.ne(expr_add~nopar~nobra.expr, expr2.expr)}
| {lt} expr_add~nopar~nobra lt no [expr2]:expr_add~nopar~nobra {-> New expr.lt(expr_add~nopar~nobra.expr, expr2.expr)}
| {le} expr_add~nopar~nobra le no [expr2]:expr_add~nopar~nobra {-> New expr.le(expr_add~nopar~nobra.expr, expr2.expr)}
+ | {ll} expr_eq~nopar~nobra ll no [expr2]:expr_add~nopar~nobra {-> New expr.ll(expr_eq~nopar~nobra.expr, expr2.expr)}
| {gt} expr_add~nopar~nobra gt no [expr2]:expr_add~nopar~nobra {-> New expr.gt(expr_add~nopar~nobra.expr, expr2.expr)}
| {ge} expr_add~nopar~nobra ge no [expr2]:expr_add~nopar~nobra {-> New expr.ge(expr_add~nopar~nobra.expr, expr2.expr)}
+ | {gg} expr_eq~nopar~nobra gg no [expr2]:expr_add~nopar~nobra {-> New expr.gg(expr_eq~nopar~nobra.expr, expr2.expr)}
| {starship} expr_add~nopar~nobra starship no [expr2]:expr_add~nopar~nobra {-> New expr.starship(expr_add~nopar~nobra.expr, expr2.expr)}
| {isa} expr_add~nopar~nobra kwisa no type~nobra {-> New expr.isa(expr_add~nopar~nobra.expr, type~nobra.type)}
;
Abstract Syntax Tree
/*****************************************************************************/
-module = packagedecl? [imports]:import* [classdefs]:classdef*;
+module = moduledecl? [imports]:import* [classdefs]:classdef*;
-packagedecl
- = doc? kwpackage id;
+moduledecl
+ = doc? kwmodule id;
import = {std} visibility kwimport id
| {no} visibility kwimport kwend
| {write} kwredef? visibility? kwwritable
;
-methid = {id} id | {plus} plus | {minus} minus | {star} star | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign;
+methid = {id} id | {plus} plus | {minus} minus | {star} star | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt | {ll} ll | {gg} gg | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign;
signature = [params]:param* type? [closure_decls]:closure_decl*;
-param = id type? dotdotdot?
+param = id type? dotdotdot?
;
closure_decl = kwbreak? bang id signature expr?
| {ne} expr [expr2]:expr
| {lt} expr [expr2]:expr
| {le} expr [expr2]:expr
+ | {ll} expr [expr2]:expr
| {gt} expr [expr2]:expr
| {ge} expr [expr2]:expr
+ | {gg} expr [expr2]:expr
| {isa} expr type
| {plus} expr [expr2]:expr
| {minus} expr [expr2]:expr