运营商优先于野牛

时间:2016-12-05 22:42:11

标签: substring bison tokenize operator-precedence

我有一个flex-bison项目,我需要支持一些字符串运算符,运算符'^'表示反转一个字符串,operator [i]表示返回字符串中的索引i。 正确的输入和输出,例如:

input : ^"abc"[0]      ---> correct output: "c", my output: "a"

那是因为首先我要反转它(“cba”)然后取0索引(“cba”[0]是c)。 现在,我不知道如何做这个优先级,所以我的代码输出“a”,因为它首先需要“abc”[0] - > “a”然后将其反转 - >“a”。截至目前,我已经在我的野牛文件中:

%left STR MINI
%left '^'         
substring:

STR MINI          {    //THIS IS DONE FIRST, SUBSTRING    
                   $$ = substringFind($1,$2,$2,temp);
                  }
| '^' substring   {   //BUT I WANT THIS (REVERSING) TO BE FIRST    
                  $$ = reverseStrings($2,temp);
                  }
;

如何更改优先顺序?我不太了解优先级规则,在多个(*)之前使用加号(+)非常容易,但是对于那些运算符我真的不知道如何使用它。 任何帮助......?

1 个答案:

答案 0 :(得分:1)

您需要单独制作,而不是在同一制作中替代,例如:

string
    : substring
    ;

substring
    : reverse MINI { ... }
    | reverse
    ;

reverse
    : "^" reverse { ... }
    | STR
    ;