diff options
| author | Graydon Hoare <[email protected]> | 2010-09-23 15:46:31 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-09-23 15:46:31 -0700 |
| commit | 46e46d0b49de8e245d091f7062dfc28ab71e869e (patch) | |
| tree | 5ca0d7ab10eb2a89b9c2a299ff3490eac912bf5d /src/comp/front/token.rs | |
| parent | More fleshing-out on rustc.me.trans. Emitting modules and fns corresponding t... (diff) | |
| download | rust-46e46d0b49de8e245d091f7062dfc28ab71e869e.tar.xz rust-46e46d0b49de8e245d091f7062dfc28ab71e869e.zip | |
Translate a bunch of the material (lltrans, llasm, abi) from rustboot to rustc, and move files around.
Diffstat (limited to 'src/comp/front/token.rs')
| -rw-r--r-- | src/comp/front/token.rs | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/src/comp/front/token.rs b/src/comp/front/token.rs new file mode 100644 index 00000000..b9b2fa07 --- /dev/null +++ b/src/comp/front/token.rs @@ -0,0 +1,348 @@ +import util.common.ty_mach; +import util.common.ty_mach_to_str; +import util.common.new_str_hash; +import std._int; +import std._uint; + +tag binop { + PLUS; + MINUS; + STAR; + SLASH; + PERCENT; + CARET; + AND; + OR; + LSL; + LSR; + ASR; +} + +tag token { + /* Expression-operator symbols. */ + EQ; + LT; + LE; + EQEQ; + NE; + GE; + GT; + ANDAND; + OROR; + NOT; + TILDE; + + BINOP(binop); + BINOPEQ(binop); + + AS; + WITH; + + /* Structural symbols */ + AT; + DOT; + COMMA; + SEMI; + COLON; + QUES; + RARROW; + SEND; + LARROW; + LPAREN; + RPAREN; + LBRACKET; + RBRACKET; + LBRACE; + RBRACE; + + /* Module and crate keywords */ + MOD; + USE; + AUTH; + META; + + /* Metaprogramming keywords */ + SYNTAX; + POUND; + + /* Statement keywords */ + IF; + ELSE; + DO; + WHILE; + ALT; + CASE; + + FAIL; + DROP; + + IN; + FOR; + EACH; + PUT; + RET; + BE; + + /* Type and type-state keywords */ + TYPE; + CHECK; + CLAIM; + PROVE; + + /* Effect keywords */ + IO; + STATE; + UNSAFE; + + /* Type qualifiers */ + NATIVE; + AUTO; + MUTABLE; + + /* Name management */ + IMPORT; + EXPORT; + + /* Value / stmt declarators */ + LET; + CONST; + + /* Magic runtime services */ + LOG; + SPAWN; + BIND; + THREAD; + YIELD; + JOIN; + + /* Literals */ + LIT_INT(int); + LIT_UINT(uint); + LIT_MACH_INT(ty_mach, int); + LIT_STR(str); + LIT_CHAR(char); + LIT_BOOL(bool); + + /* Name components */ + IDENT(str); + IDX(int); + UNDERSCORE; + + /* Reserved type names */ + BOOL; + INT; + UINT; + FLOAT; + CHAR; + STR; + MACH(ty_mach); + + /* Algebraic type constructors */ + REC; + TUP; + TAG; + VEC; + ANY; + + /* Callable type constructors */ + FN; + ITER; + + /* Object type */ + OBJ; + + /* Comm and task types */ + CHAN; + PORT; + TASK; + + BRACEQUOTE(str); + EOF; +} + +fn binop_to_str(binop o) -> str { + alt (o) { + case (PLUS) { ret "+"; } + case (MINUS) { ret "-"; } + case (STAR) { ret "*"; } + case (SLASH) { ret "/"; } + case (PERCENT) { ret "%"; } + case (CARET) { ret "^"; } + case (AND) { ret "&"; } + case (OR) { ret "|"; } + case (LSL) { ret "<<"; } + case (LSR) { ret ">>"; } + case (ASR) { ret ">>>"; } + } +} + +fn to_str(token t) -> str { + alt (t) { + + case (EQ) { ret "="; } + case (LT) { ret "<"; } + case (LE) { ret "<="; } + case (EQEQ) { ret "=="; } + case (NE) { ret "!="; } + case (GE) { ret ">="; } + case (GT) { ret ">"; } + case (NOT) { ret "!"; } + case (TILDE) { ret "~"; } + case (OROR) { ret "||"; } + case (ANDAND) { ret "&&"; } + + case (BINOP(?op)) { ret binop_to_str(op); } + case (BINOPEQ(?op)) { ret binop_to_str(op) + "="; } + + case (AS) { ret "as"; } + case (WITH) { ret "with"; } + + + /* Structural symbols */ + case (AT) { ret "@"; } + case (DOT) { ret "."; } + case (COMMA) { ret ","; } + case (SEMI) { ret ";"; } + case (COLON) { ret ":"; } + case (QUES) { ret "?"; } + case (RARROW) { ret "->"; } + case (SEND) { ret "<|"; } + case (LARROW) { ret "<-"; } + case (LPAREN) { ret "("; } + case (RPAREN) { ret ")"; } + case (LBRACKET) { ret "["; } + case (RBRACKET) { ret "]"; } + case (LBRACE) { ret "{"; } + case (RBRACE) { ret "}"; } + + /* Module and crate keywords */ + case (MOD) { ret "mod"; } + case (USE) { ret "use"; } + case (AUTH) { ret "auth"; } + case (META) { ret "meta"; } + + /* Metaprogramming keywords */ + case (SYNTAX) { ret "syntax"; } + case (POUND) { ret "#"; } + + /* Statement keywords */ + case (IF) { ret "if"; } + case (ELSE) { ret "else"; } + case (DO) { ret "do"; } + case (WHILE) { ret "while"; } + case (ALT) { ret "alt"; } + case (CASE) { ret "case"; } + + case (FAIL) { ret "fail"; } + case (DROP) { ret "drop"; } + + case (IN) { ret "in"; } + case (FOR) { ret "for"; } + case (EACH) { ret "each"; } + case (PUT) { ret "put"; } + case (RET) { ret "ret"; } + case (BE) { ret "be"; } + + /* Type and type-state keywords */ + case (TYPE) { ret "type"; } + case (CHECK) { ret "check"; } + case (CLAIM) { ret "claim"; } + case (PROVE) { ret "prove"; } + + /* Effect keywords */ + case (IO) { ret "io"; } + case (STATE) { ret "state"; } + case (UNSAFE) { ret "unsafe"; } + + /* Type qualifiers */ + case (NATIVE) { ret "native"; } + case (AUTO) { ret "auto"; } + case (MUTABLE) { ret "mutable"; } + + /* Name management */ + case (IMPORT) { ret "import"; } + case (EXPORT) { ret "export"; } + + /* Value / stmt declarators */ + case (LET) { ret "let"; } + case (CONST) { ret "const"; } + + /* Magic runtime services */ + case (LOG) { ret "log"; } + case (SPAWN) { ret "spawn"; } + case (BIND) { ret "bind"; } + case (THREAD) { ret "thread"; } + case (YIELD) { ret "yield"; } + case (JOIN) { ret "join"; } + + /* Literals */ + case (LIT_INT(?i)) { ret _int.to_str(i, 10u); } + case (LIT_UINT(?u)) { ret _uint.to_str(u, 10u); } + case (LIT_MACH_INT(?tm, ?i)) { + ret _int.to_str(i, 10u) + + "_" + ty_mach_to_str(tm); + } + + case (LIT_STR(?s)) { + // FIXME: escape. + ret "\"" + s + "\""; + } + case (LIT_CHAR(?c)) { + // FIXME: escape and encode. + auto tmp = "'"; + tmp += c as u8; + tmp += '\'' as u8; + ret tmp; + } + + case (LIT_BOOL(?b)) { + if (b) { ret "true"; } else { ret "false"; } + } + + /* Name components */ + case (IDENT(?s)) { auto si = "ident:"; si += s; ret si; } + case (IDX(?i)) { ret "_" + _int.to_str(i, 10u); } + case (UNDERSCORE) { ret "_"; } + + /* Reserved type names */ + case (BOOL) { ret "bool"; } + case (INT) { ret "int"; } + case (UINT) { ret "uint"; } + case (FLOAT) { ret "float"; } + case (CHAR) { ret "char"; } + case (STR) { ret "str"; } + case (MACH(?tm)) { ret ty_mach_to_str(tm); } + + /* Algebraic type constructors */ + case (REC) { ret "rec"; } + case (TUP) { ret "tup"; } + case (TAG) { ret "tag"; } + case (VEC) { ret "vec"; } + case (ANY) { ret "any"; } + + /* Callable type constructors */ + case (FN) { ret "fn"; } + case (ITER) { ret "iter"; } + + /* Object type */ + case (OBJ) { ret "obj"; } + + /* Comm and task types */ + case (CHAN) { ret "chan"; } + case (PORT) { ret "port"; } + case (TASK) { ret "task"; } + + case (BRACEQUOTE(_)) { ret "<bracequote>"; } + case (EOF) { ret "<eof>"; } + } +} + + + +// Local Variables: +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C ../.. 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: |