Copyright (C) 2009 The University of Melbourne Doesn't handle epsilon productions properly -- throws an exception when computing the action table: Uncaught Mercury exception: Software Error: map__lookup: key not found Key Type: grammar.symbol Key Functor: terminal/1 Value Type: list.list(lalr.item) Stack dump follows: 0 pred exception.throw/1-0 (erroneous) (exception.m:304) 1 pred require.error/1-0 (erroneous) (require.m:101) 2 pred require.report_lookup_error/3-0 (erroneous) (require.m:89) 3 pred map.lookup/3-0 (det) (map.m:469) 4 pred tables.IntroducedFrom__pred__actions2__119__6/8-0 (det) (tables.m:121) 5 2* pred list.foldl2/6-0 (det) (list.m:1356 and others) 7 pred tables.actions2/12-0 (det) (tables.m:119) 8 pred tables.actions1/10-0 (det) (tables.m:91) 9 pred tables.actions/8-0 (det) (tables.m:72) 10 pred moose.process_2/8-0 (det) (moose.m:200) 11 pred moose.process/3-0 (det) (moose.m:133) 12 pred moose.main2/4-0 (det) (moose.m:59) 13 pred moose.main/2-0 (det) (moose.m:36) Doesn't give good error messages if :- action is used but the rule doesn't exist. Doesn't give good error messages for misplaced semicolons. :- rule init_declarator(init_declarator). init_declarator(init_declarator(D, Init)) ---> declarator(D) ; { Init = no }. If there is some error in the grammar moose will write an empty or broken .m file. This may be a problem in some cases.