Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8079483
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 5, 20262026-06-05T16:07:00+00:00 2026-06-05T16:07:00+00:00

Assume this code works: left ‘*’ left ‘+’ expr: expr ‘+’ expr | expr

  • 0

Assume this code works:

left '*'
left '+'

expr: expr '+' expr
    | expr '*' expr
    ;

I want to define an other precedence marker like:

left MULTIPLY
left PLUS

expr: expr '+' expr %prec PLUS
    | expr '*' expr %prec MULTIPLY
    ;

Yet this is not actually effective.

I suppose these two forms should be equivalent, however, they’re not.

It’s not on practical problem. I just want to know the reason and the principle for this phenomenon.

Thanks.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-05T16:07:03+00:00Added an answer on June 5, 2026 at 4:07 pm

    You say you are not trying to solve a specific, practical problem. And from your question, I’m a little confused about how you are trying to use the precedence marker.

    I think you will find that you don’t need to use the precedence marker often. It is usually simpler, and clearer to the reader, to rewrite your grammar so that precedence is explicitly accounted for. To give multiply and divide higher precedence than add and subtract, you can do something like this (example adapted from John Levine, lex & yacc 2/e, 1992):

    %token NAME NUMBER
    
    %%
    
    stmt : NAME '=' expr
         | expr
         ;
    
    expr : expr '+' term
         | expr '-' term
         | term
         ;
    
    term : term '*' factor
         | term '/' factor
         | factor
         ;
    
    factor : '(' expr ')'
           | '-' factor
           | NUMBER
           ;
    

    In your example, PLUS and MULTIPLY are not real tokens; you can’t use them interchangeably with '+' and '*'. Levine calls them pseudo-tokens. They are there to link your productions back to your list of precedences that you have defined with %left and %nonassoc declarations. He gives this example of how you might use %prec to give unary minus high precedence even though the ‘-‘ token has low precedence:

    %token NAME NUMBER
    %left '-' '+'
    %left '*' '/'
    %nonassoc UMINUS
    
    %%
    
    stmt : NAME '=' expr
         | expr
         ;
    
    expr : expr '+' expr
         | expr '-' expr
         | expr '*' expr
         | expr '/' expr
         | '-' expr %prec UMINUS
         | '(' expr ')'
         | NUMBER
         ;
    

    To sum up, I would recommend following the pattern of my first code example rather than the second; make the grammar explicit.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Assume I have executed this js code: var container=function() { //do something } container.a=function
Assume that I have this piece of code: @interface Foo : NSObject { Bar
So I have this piece of code, and let's assume I'm filling out a
Could somebody please show code which would do this quickly? Assume we get three
I have a class like this (assume all malloc's succeedes) class CMyClass { public:
I think this code should be fine but Static Analyzer doesn't like it. I
Trying to figure out this pseudo code. The following is assumed.... I can only
assume this following function: int binaryTree::findHeight(node *n) { if (n == NULL) { return
I assume this is really easy, and I'm missing something obvious. I'm connecting to
I assume this should be fine bool prefMatch = false; // Is the frequency

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.