0
에 conflits을 줄일 나는 다음 파서 있습니다시프트/ocamlyacc
%{
open t
open Lexer
%}
%token <int> INT
%token <float> FLOAT
%token <char> CHAR
%token <bool> BOOL
%token PLUS Menos Mult Div Bigger Smaller MINUS TIMES
%token Equals Atribuicao SoE BoE And Or
%token IF THEN ELSE BEGIN END FUNCTION WHILE SEQ RANGE DEF RETURN OF TO PV VIR DD
%token RP LP SPL SPR LB RB
%token EOL
%left PLUS MINUS /* lowest precedence */
%left TIMES Div /* medium precedence */
%nonassoc UMINUS /* highest precedence */
%start main /* the entry point */
%type <int> main %%
main:
| expr EOL { $1 }
expr:
INT { $1 }
| IF LP expr RP { $3 }
| BEGIN expr END { $2 }
| RETURN expr PV { $2 }
| LP expr RP { $2 }
| expr PLUS expr { $1 + $3 }
| expr MINUS expr { $1 - $3 }
| expr TIMES expr { $1 * $3 }
| expr Div expr { $1/$3 }
| MINUS expr %prec UMINUS { - $2 }
나는 그것이 완료되지 않은 것을 알고 난 여전히 그것을 구축하고 올바르게/선돌을 ocamlyacc 사용하는 방법을 배우고있다. 그것은 나에게 10 이동/갈등을 줄일 수 있습니다 | expr Bigger expr {$1 > $3}
...하지만이 같은 괄호이 줄을 추가 할 때 :
그럼 내가이 줄을 추가 할 때 '
| LP expr RP Bigger LP expr RP {$2 > $6}
LP는'('대표와 RP가 나타내는) '
그것은 완벽하게 맞는 나에게 오류없이 변화를주지 않는다/충돌
이 문제의 올바른 솔루션을 줄이기? 그렇다면 왜? 질문이 하나 더 있습니다. 파서에서 잘못된 것을하고 있습니까? 아니면 그냥 완료되지 않았습니까?
감사합니다.
그것은 정확하고 잘못된 thnx 무엇인지 이해하는 것이 나에게 도움이 –