(실제로 jison를 사용하지만 동일해야합니다). 계산기 데모를 사용하여 설명해 보겠습니다. http://zaach.github.com/jison/try/들소 우선 내가 jison (들소의 자바 스크립트 상당)를 사용하고 있는데 나는 다음과 같은 우선 순위의 문제가있어
잘 작동합니다. 우선 순위는
내가이
| e '*' e %prec TIMESPREC
{$$ = $1*$3;}
을하고
%left '+' '-'
%left TIMESPREC '/'
%left '^'
%left UMINUS
에 우선 순위를 변경하려면 '*'라인을 변경하는 경우 문법은
e
: e '+' e
{$$ = $1+$3;}
| e '-' e
{$$ = $1-$3;}
| e '*' e
{$$ = $1*$3;}
| e '/' e
{$$ = $1/$3;}
| e '^' e
{$$ = Math.pow($1, $3);}
| '-' e %prec UMINUS
{$$ = -$2;}
입니다 더 이상 작동하지 않습니다. 그것도 똑같이 작동하지 않아? 예를 들어 2 x + 3이 (2x) +3으로 파싱되는 대수 구문을 궁극적으로 원한다면 유용 할 수 있습니다.
감사합니다. %prec
는 모든 개별 토큰에, 규칙의 우선 순위를 설정하기 때문에
감사합니다. 그 이유를 설명합니다! 이제 2 * x + 3 대신에 2 x + 3 같은 것을 허용하고 싶다면 올바른 해결책은 무엇입니까? 감사합니다. – user1213898
기본적으로 이것을 허용하기 위해 문법을 다시 작성해야합니다. 중요한 것은 규칙에서'*'를 단순히 제거 할 수없고 우선 순위를 설정하는 것이 충돌을 일으킬 수 있기 때문입니다. 본질적으로'% prec'는 이것으로 여러분의 문제를 해결하지 못할 것입니다. 그건 그렇고, 답변을 upvote 또는 받아보다 감사를 말할 더 좋은 방법은 없습니다 :) – Dervall