added .moo (parser definitions) to Mercury extension list

This commit is contained in:
Sebastian Godelet
2014-04-06 20:26:28 +02:00
parent a620d45635
commit fe183c07f5
5 changed files with 205 additions and 42 deletions

View File

@@ -1102,6 +1102,7 @@ Mercury:
lexer: Prolog lexer: Prolog
extensions: extensions:
- .m - .m
- .moo
MiniD: # Legacy MiniD: # Legacy
searchable: false searchable: false

View File

@@ -217,6 +217,9 @@
"ABAP": [ "ABAP": [
".abap" ".abap"
], ],
"Moocode": [
".moo"
],
"Java": [ "Java": [
".java" ".java"
], ],
@@ -340,7 +343,8 @@
".bsv" ".bsv"
], ],
"Mercury": [ "Mercury": [
".m" ".m",
".moo"
], ],
"Erlang": [ "Erlang": [
".erl", ".erl",
@@ -563,8 +567,8 @@
"zshrc" "zshrc"
] ]
}, },
"tokens_total": 484777, "tokens_total": 485338,
"languages_total": 561, "languages_total": 564,
"tokens": { "tokens": {
"Groovy": { "Groovy": {
"SHEBANG#!groovy": 1, "SHEBANG#!groovy": 1,
@@ -24491,6 +24495,41 @@
"pos": 2, "pos": 2,
"endclass.": 1 "endclass.": 1
}, },
"Moocode": {
"@verb": 1,
"toy": 3,
"do_the_work": 3,
"this": 5,
"none": 1,
"@program": 2,
"if": 4,
"(": 13,
"this.wound": 8,
")": 13,
"object_utils": 1,
"isa": 1,
"this.location": 3,
"room": 1,
"announce_all": 2,
"this.name": 4,
"continue_msg": 1,
";": 8,
"-": 1,
"fork": 1,
"endfork": 1,
"else": 1,
"wind_down_msg": 1,
"endif": 4,
"<": 1,
".": 2,
"wind": 1,
"+": 1,
"player": 1,
"tell": 1,
"player.location": 1,
"announce": 1,
"player.name": 1
},
"Java": { "Java": {
"package": 6, "package": 6,
"clojure.lang": 1, "clojure.lang": 1,
@@ -36959,29 +36998,29 @@
}, },
"Mercury": { "Mercury": {
"%": 416, "%": 416,
"-": 6914, "-": 6967,
"module": 45, "module": 46,
"rot13_verbose.": 1, "rot13_verbose.": 1,
"interface.": 12, "interface.": 13,
"import_module": 124, "import_module": 126,
"io.": 8, "io.": 8,
"pred": 253, "pred": 255,
"main": 15, "main": 15,
"(": 3284, "(": 3351,
"io__state": 4, "io__state": 4,
")": 3284, ")": 3351,
".": 592, ".": 610,
"mode": 6, "mode": 8,
"di": 54, "di": 54,
"uo": 58, "uo": 58,
"is": 244, "is": 246,
"det.": 182, "det.": 184,
"implementation.": 11, "implementation.": 12,
"char": 7, "char": 10,
"int": 124, "int": 129,
"require.": 5, "require.": 6,
"rot13a/2": 1, "rot13a/2": 1,
"A": 6, "A": 14,
"table": 1, "table": 1,
"to": 16, "to": 16,
"map": 7, "map": 7,
@@ -36996,8 +37035,8 @@
"input": 1, "input": 1,
"not": 7, "not": 7,
"rot13a": 55, "rot13a": 55,
"in": 506, "in": 510,
"out": 334, "out": 337,
"semidet.": 10, "semidet.": 10,
"rot13/2": 1, "rot13/2": 1,
"Applies": 1, "Applies": 1,
@@ -37011,13 +37050,13 @@
"else": 8, "else": 8,
"io__read_char": 1, "io__read_char": 1,
"Res": 8, "Res": 8,
"{": 23, "{": 27,
"ok": 3, "ok": 3,
"}": 24, "}": 28,
"io__write_char": 1, "io__write_char": 1,
";": 898, ";": 913,
"eof": 3, "eof": 6,
"error": 6, "error": 7,
"ErrorCode": 4, "ErrorCode": 4,
"io__error_message": 2, "io__error_message": 2,
"ErrorMessage": 4, "ErrorMessage": 4,
@@ -37041,10 +37080,10 @@
"sub_string_search": 1, "sub_string_search": 1,
"Index": 3, "Index": 3,
"NewIndex": 2, "NewIndex": 2,
"+": 125, "+": 127,
"mod": 1, "mod": 1,
"*": 18, "*": 20,
"//": 1, "//": 2,
"index_det": 1, "index_det": 1,
"read_char": 1, "read_char": 1,
"print": 3, "print": 3,
@@ -37056,9 +37095,9 @@
"store": 52, "store": 52,
"T": 52, "T": 52,
"where": 8, "where": 8,
"[": 184, "[": 203,
"]": 184, "]": 203,
"type": 56, "type": 57,
"S": 133, "S": 133,
"instance": 4, "instance": 4,
"io.state": 3, "io.state": 3,
@@ -37132,7 +37171,7 @@
"store_ref": 1, "store_ref": 1,
"store.new_ref": 1, "store.new_ref": 1,
"store.ref_functor": 1, "store.ref_functor": 1,
"string": 114, "string": 115,
"store.arg_ref": 1, "store.arg_ref": 1,
"ArgT": 4, "ArgT": 4,
"store.new_arg_ref": 3, "store.new_arg_ref": 3,
@@ -37203,7 +37242,7 @@
"representation": 1, "representation": 1,
"pragma": 41, "pragma": 41,
"foreign_type": 10, "foreign_type": 10,
"C": 24, "C": 34,
"MR_Word": 24, "MR_Word": 24,
"can_pass_as_mercury_type": 5, "can_pass_as_mercury_type": 5,
"equality": 5, "equality": 5,
@@ -37287,7 +37326,7 @@
"FieldInfo": 1, "FieldInfo": 1,
"Constructors": 2, "Constructors": 2,
"init": 8, "init": 8,
"num": 8, "num": 11,
"setField": 4, "setField": 4,
"Set": 2, "Set": 2,
"according": 2, "according": 2,
@@ -37409,7 +37448,7 @@
"mdbcomp.prim_data.": 3, "mdbcomp.prim_data.": 3,
"parse_tree.": 1, "parse_tree.": 1,
"parse_tree.prog_data.": 2, "parse_tree.prog_data.": 2,
"list.": 3, "list.": 4,
"maybe.": 3, "maybe.": 3,
"term.": 3, "term.": 3,
"polymorphism_process_module": 2, "polymorphism_process_module": 2,
@@ -37425,7 +37464,7 @@
"pred_info": 20, "pred_info": 20,
"proc_info": 11, "proc_info": 11,
"proc_id": 12, "proc_id": 12,
"list": 77, "list": 82,
"prog_var": 58, "prog_var": 58,
"builtin_state": 1, "builtin_state": 1,
"maybe": 20, "maybe": 20,
@@ -37547,7 +37586,7 @@
"ArgTypes": 6, "ArgTypes": 6,
"pred_info_set_arg_types": 1, "pred_info_set_arg_types": 1,
"PredInfo1": 5, "PredInfo1": 5,
"|": 28, "|": 38,
"OldHeadVarTypes": 2, "OldHeadVarTypes": 2,
"type_list_subsumes": 2, "type_list_subsumes": 2,
"Subn": 3, "Subn": 3,
@@ -38292,6 +38331,32 @@
"NonLocals1": 2, "NonLocals1": 2,
"CallGoalExpr": 2, "CallGoalExpr": 2,
"CallGoal": 2, "CallGoal": 2,
"expr.": 1,
"token": 5,
"parse": 1,
"exprn/1": 1,
"xx": 1,
"scan": 16,
"rule": 3,
"exprn": 7,
"Num": 18,
"term": 10,
"B": 8,
"factor": 6,
"/": 1,
"Chars": 2,
"Toks": 13,
"Toks0": 11,
"list__reverse": 1,
"Cs": 9,
"char__is_whitespace": 1,
"char__is_digit": 2,
"takewhile": 1,
"Digits": 2,
"Rest": 2,
"string__from_char_list": 1,
"NumStr": 2,
"string__det_to_int": 1,
"char.": 1, "char.": 1,
"getopt_io.": 1, "getopt_io.": 1,
"short_option": 36, "short_option": 36,
@@ -38378,7 +38443,6 @@
"debug_code_gen_pred_id": 3, "debug_code_gen_pred_id": 3,
"debug_opt": 3, "debug_opt": 3,
"debug_term": 4, "debug_term": 4,
"term": 1,
"termination": 3, "termination": 3,
"analysis": 1, "analysis": 1,
"debug_opt_pred_id": 3, "debug_opt_pred_id": 3,
@@ -51924,6 +51988,7 @@
"Org": 358, "Org": 358,
"Turing": 44, "Turing": 44,
"ABAP": 1500, "ABAP": 1500,
"Moocode": 93,
"Java": 8987, "Java": 8987,
"Omgrofl": 57, "Omgrofl": 57,
"GAS": 133, "GAS": 133,
@@ -51960,7 +52025,7 @@
"RMarkdown": 19, "RMarkdown": 19,
"Stylus": 76, "Stylus": 76,
"Bluespec": 1298, "Bluespec": 1298,
"Mercury": 30628, "Mercury": 31096,
"Erlang": 2928, "Erlang": 2928,
"NSIS": 725, "NSIS": 725,
"Arduino": 20, "Arduino": 20,
@@ -52072,6 +52137,7 @@
"Org": 1, "Org": 1,
"Turing": 1, "Turing": 1,
"ABAP": 1, "ABAP": 1,
"Moocode": 2,
"Java": 6, "Java": 6,
"Omgrofl": 1, "Omgrofl": 1,
"GAS": 1, "GAS": 1,
@@ -52108,7 +52174,7 @@
"RMarkdown": 1, "RMarkdown": 1,
"Stylus": 1, "Stylus": 1,
"Bluespec": 2, "Bluespec": 2,
"Mercury": 8, "Mercury": 9,
"Erlang": 5, "Erlang": 5,
"NSIS": 2, "NSIS": 2,
"Arduino": 1, "Arduino": 1,
@@ -52155,5 +52221,5 @@
"Protocol Buffer": 1, "Protocol Buffer": 1,
"Scheme": 2 "Scheme": 2
}, },
"md5": "1c540f92a03ec13cf822b38473b5a4ff" "md5": "9dbc6271b8d729f78fea54760082d89a"
} }

72
samples/Mercury/expr.moo Normal file
View File

@@ -0,0 +1,72 @@
:- module expr.
:- interface.
:- import_module char, int, list.
:- type token
---> ('+')
; ('-')
; ('*')
; ('/')
; num(int)
; ('(')
; (')')
; eof
.
:- parse(exprn/1, token, eof, xx, in, out).
:- pred scan(list(char), list(token)).
:- mode scan(in, out) is det.
:- implementation.
:- import_module string, require.
:- rule exprn(int).
exprn(Num) ---> exprn(A), [+], term(B), { Num = A + B }.
exprn(Num) ---> exprn(A), [-], term(B), { Num = A - B }.
exprn(Num) ---> term(Num).
:- rule term(int).
term(Num) ---> term(A), [*], factor(B), { Num = A * B }.
term(Num) ---> term(A), [/], factor(B), { Num = A // B }.
term(Num) ---> factor(Num).
:- rule factor(int).
factor(Num) ---> ['('], exprn(Num), [')'].
factor(Num) ---> [num(Num)].
scan(Chars, Toks) :-
scan(Chars, [], Toks0),
list__reverse(Toks0, Toks).
:- pred scan(list(char), list(token), list(token)).
:- mode scan(in, in, out) is det.
scan([], Toks, [eof|Toks]).
scan([C|Cs], Toks0, Toks) :-
( char__is_whitespace(C) ->
scan(Cs, Toks0, Toks)
; char__is_digit(C) ->
takewhile(char__is_digit, [C|Cs], Digits, Rest),
string__from_char_list(Digits, NumStr),
Num = string__det_to_int(NumStr),
scan(Rest, [num(Num)|Toks0], Toks)
; C = ('+') ->
scan(Cs, ['+'|Toks0], Toks)
; C = ('-') ->
scan(Cs, ['-'|Toks0], Toks)
; C = ('*') ->
scan(Cs, ['*'|Toks0], Toks)
; C = ('/') ->
scan(Cs, ['/'|Toks0], Toks)
; C = ('(') ->
scan(Cs, ['('|Toks0], Toks)
; C = (')') ->
scan(Cs, [')'|Toks0], Toks)
;
error("expr: syntax error in input")
).

View File

@@ -0,0 +1,5 @@
@program toy:wind
this.wound = this.wound + 2;
player:tell("You wind up the ", this.name,".");
player.location:announce(player.name, " winds up the ", this.name,".");
.

19
samples/Moocode/toy.moo Normal file
View File

@@ -0,0 +1,19 @@
@verb toy:do_the_work this none this
@program toy:do_the_work
if (this.wound)
if ($object_utils:isa(this.location,$room))
this.location:announce_all(this.name," ", this:continue_msg());
this.wound = this.wound - 1;
if (this.wound)
fork (15)
this:do_the_work();
endfork
else
this.location:announce_all(this.name, " ", this:wind_down_msg());
endif
endif
if (this.wound < 0)
this.wound = 0;
endif
endif
.