[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Restructure parsing of reverts to avoid ambiguities in relation to B
From: |
Janek Warchoł |
Subject: |
Re: Restructure parsing of reverts to avoid ambiguities in relation to BACKUP (issue 8103043) |
Date: |
Tue, 2 Apr 2013 23:50:50 +0200 |
Thanks fot the explanation! Could you paste it into commit message?
Janek
On Tue, Apr 2, 2013 at 11:40 PM, <address@hidden> wrote:
> Reviewers: janek,
>
> Message:
>
> On 2013/04/02 21:23:16, janek wrote:
>>
>> I'm not sure what the previous ambiguities were
>
>
> A music expression could start with BACKUP (an artificially inserted
> token never present in the source code itself) due to these rules. I
> needed BACKUP in a different context and got shift/reduce conflicts
> because of these rules. I finally managed writing the _other_ code in a
> way reining its BACKUP tokens in, so the respective patch could go on
> independent review/countdown.
>
> It still makes sense, however, to recognize BACKUP only in the limited
> contexts where it is actually being produced, in order to keep such
> conflicts down, and to stop the parser from creative reinterpretation of
> situations that can only arise by programmer error.
>
> Description:
> Restructure parsing of reverts to avoid ambiguities in relation to
> BACKUP
>
> Please review this at https://codereview.appspot.com/8103043/
>
> Affected files:
> M lily/parser.yy
>
>
> Index: lily/parser.yy
> diff --git a/lily/parser.yy b/lily/parser.yy
> index
> ee413b301feb33f4d16d4a372c4a4c4c0ccfd8bc..795dcd27c953e062f6bffb4c317ada2f3bd84b18
> 100644
> --- a/lily/parser.yy
> +++ b/lily/parser.yy
> @@ -2066,6 +2066,13 @@ property_operation:
> // \revert Accidental.color
>
> revert_arg:
> + revert_arg_backup BACKUP symbol_list_arg
> + {
> + $$ = $3;
> + }
> + ;
> +
> +revert_arg_backup:
> revert_arg_part
> {
> if (scm_is_null ($1)
> @@ -2074,20 +2081,16 @@ revert_arg:
> else
> MYBACKUP (SYMBOL_LIST, scm_reverse_x ($1, SCM_EOL),
> @1);
> }
> - | revert_arg BACKUP symbol_list_arg
> - {
> - $$ = $3;
> - }
> ;
>
> // revert_arg_part delivers results in reverse
> revert_arg_part:
> symbol_list_part
> - | revert_arg BACKUP SCM_ARG '.' symbol_list_part
> + | revert_arg_backup BACKUP SCM_ARG '.' symbol_list_part
> {
> $$ = scm_append_x (scm_list_2 ($5, $3));
> }
> - | revert_arg BACKUP SCM_ARG symbol_list_part
> + | revert_arg_backup BACKUP SCM_ARG symbol_list_part
> {
> $$ = scm_append_x (scm_list_2 ($4, $3));
> }
>
>