Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.compilers > #1512

Re: Grammar with low-precedence postfix operator?

From Kaz Kylheku <kaz@kylheku.com>
Newsgroups comp.compilers
Subject Re: Grammar with low-precedence postfix operator?
Date 2015-02-05 21:10 +0000
Organization Aioe.org NNTP Server
Message-ID <15-02-010@comp.compilers> (permalink)
References <15-02-006@comp.compilers>

Show all headers | View raw


On 2015-02-05, Robert Jacobson <rljacobson@gmail.com> wrote:
> I'm trying to write an ANTLR4 grammar for a language with a low precedence
> postfix operator (Wolfram Language with '&', but I use a simple toy grammar
> below). I'm struggling with finding the right pattern to express this
> language.

I suspect this is not nicely solvable by LALR type tools. Only with hacks.

The problem is that the low precedence postfix operator has no starting
marker to look back to.

When this operator occurs in an expression, it means "everything which comes
before me in the expression is my argument".

The problem with this is that it leaves no room for the onstruct to be
*embedded* in another one. Since the operator says "everything is mine!" it
means, by the same token (pun intended) that "I am not a subexpression; I am
the top-level constituent!". And since that is the case, because
it is a postfix operator, it means that the expression ends right there.

If you want 2+2++^3 to mean (2+2)++^3, that means that you need
a special low-precedence versions of ^ (and other operators) for that
case, so the ++ expression can be a constituent of something.

Try something along these lines. This Yacc grammar only gives me one
shift-reduce conflicts, on account of the empty production rule for
pp_factor_continue.  I didn't test it; I only skimmed through the state
transitions in y.output:

%token INT PLUSPLUS

%%

expr : mul_expr
     | expr '+' mul_expr
     | expr PLUSPLUS pp_add_continue
     ;

mul_expr : factor
         | primary '*' factor
         ;

factor : primary
       | factor '^' primary
       ;

primary : '(' expr ')'
        | INT
        ;

pp_add_continue : '+' mul_expr
                | pp_mul_continue
                ;

pp_mul_continue : '*' factor
                | pp_factor_continue
                ;

pp_factor_continue : '^' primary
                   | /* NOTHING */
                   ;

Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Grammar with low-precedence postfix operator? Robert Jacobson <rljacobson@gmail.com> - 2015-02-05 13:27 -0500
  Re: Grammar with low-precedence postfix operator? Kaz Kylheku <kaz@kylheku.com> - 2015-02-05 21:10 +0000
    Re: Grammar with low-precedence postfix operator? Robert Jacobson <rljacobson@gmail.com> - 2015-02-07 10:30 -0800
  Re: Grammar with low-precedence postfix operator? anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-02-07 11:27 +0000
    Re: Grammar with low-precedence postfix operator? jgk@panix.com (Joe keane) - 2015-02-10 21:03 +0000
      Re: Grammar with low-precedence postfix operator? Kaz Kylheku <kaz@kylheku.com> - 2015-02-11 02:19 +0000
  Re: Grammar with low-precedence postfix operator? Stefan Monnier <monnier@iro.umontreal.ca> - 2015-02-08 12:34 -0500
    Re: Grammar with low-precedence postfix operator? Kaz Kylheku <kaz@kylheku.com> - 2015-02-09 01:24 +0000
      Re: Grammar with low-precedence postfix operator? Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2015-02-09 08:05 +0100
  Re: Grammar with low-precedence postfix operator? Robert Jacobson <rljacobson@gmail.com> - 2015-02-21 12:55 -0800

csiph-web