diff options
author | Hans Bolinder <[email protected]> | 2013-08-27 10:08:48 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2013-08-28 08:04:23 +0200 |
commit | 63f418886743517b426920590fb09d6c4f1eb8c7 (patch) | |
tree | 9a8b2bbf9f0cbf6f6c23d755d3bc72e463a575d4 /lib/parsetools/test | |
parent | e2c0f6dd1fc9b6bd506a481644b9c63f9d575aa1 (diff) | |
download | otp-63f418886743517b426920590fb09d6c4f1eb8c7.tar.gz otp-63f418886743517b426920590fb09d6c4f1eb8c7.tar.bz2 otp-63f418886743517b426920590fb09d6c4f1eb8c7.zip |
Fix a Yecc bug
A bug causing Yecc to generate badly formed parsers when encountering
very simple recursive rules has been fixed.
Thanks to Eric Pailleau for reporting the bug.
Diffstat (limited to 'lib/parsetools/test')
-rw-r--r-- | lib/parsetools/test/yecc_SUITE.erl | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl index 3d66a2a525..9c865a1ec6 100644 --- a/lib/parsetools/test/yecc_SUITE.erl +++ b/lib/parsetools/test/yecc_SUITE.erl @@ -49,7 +49,7 @@ otp_5369/1, otp_6362/1, otp_7945/1, otp_8483/1, otp_8486/1, - otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1]). + otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1, otp_11269/1]). % Default timetrap timeout (set in init_per_testcase). -define(default_timeout, ?t:minutes(1)). @@ -76,7 +76,8 @@ groups() -> [empty, prec, yeccpre, lalr, old_yecc, other_examples]}, {bugs, [], [otp_5369, otp_6362, otp_7945, otp_8483, otp_8486]}, - {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302]}]. + {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302, + otp_11269]}]. init_per_suite(Config) -> Config. @@ -1963,6 +1964,38 @@ otp_10302(Config) when is_list(Config) -> run(Config, Ts), ok. +otp_11269(doc) -> + "OTP-11269. A bug."; +otp_11269(suite) -> []; +otp_11269(Config) when is_list(Config) -> + Dir = ?privdir, + Filename = filename:join(Dir, "OTP-11269.yrl"), + Ret = [return, {report, false}], + Pai = <<"Nonterminals + list list0 list1 newline_list. + + Terminals + '\n' semi. + + Rootsymbol list. + + Endsymbol '$end'. + + list -> newline_list list0 : '$2'. + + list0 -> list1 '\n' newline_list : '$1'. + + list1 -> list1 semi newline_list list1 : + {command_connect, '$1', '$4', semi}. + + newline_list -> newline_list '\n' : nil.">>, + ok = file:write_file(Filename, Pai), + {ok,ErlFile,[{_YrlFile,[{none,yecc,{conflicts,1,0}}]}]} = + yecc:file(Filename, Ret), + Opts = [return, warn_unused_vars,{outdir,Dir}], + {ok,'OTP-11269',_Warnings} = compile:file(ErlFile, Opts), + ok. + yeccpre_size() -> yeccpre_size(default_yeccpre()). |