ルールの途中でコード{printf( "something");}を置くとこの警告が表示されます。ルールの終わり、私はエラーがなく、すべてうまく動作します。
この点画に警告を投げると1つのシフトを投げる/ reduce衝突
sent_asig: ID {printf("something");} ASIG exp {printf("sent_asig: ID ASIG exp \n");}
| ID ASIG CTE_STRING {printf("sent_asig: ID ASIG CTE_STRING \n");}
| ID ASIG CTE_STRING CONCAT ID {printf("sent_asig: ID ASIG CTE_STRING CONCAT ID \n");}
| ID ASIG ID CONCAT CTE_STRING {printf("sent_asig: ID ASIG ID CONCAT CTE_STRING \n");};
そして、これは誰かがしたい場合は罰金
sent_asig: ID ASIG exp {printf("sent_asig: ID ASIG exp \n");}
| ID ASIG CTE_STRING {printf("sent_asig: ID ASIG CTE_STRING \n");}
| ID ASIG CTE_STRING CONCAT ID {printf("sent_asig: ID ASIG CTE_STRING CONCAT ID \n");}
| ID ASIG ID CONCAT CTE_STRING {printf("sent_asig: ID ASIG ID CONCAT CTE_STRING \n");};
を働き、警告と0競合をスローすることはありませんこのエラーの原因が他の部分にある可能性があるので、完全なルールを参照してください。
%token ID
%token CTE
%token ABREPAR
%token FINPAREN
%token AND
%token OR
%token COMA
%token ASIG
%token COMP
%token RESTASIG
%token CONCAT
%token SUMASIG
%token MULTASIG
%token DIVASIG
%token MENOR_IGU
%token MENOR
%token MAYOR_IGU
%token MAYOR
%token NOT
%token DIST
%token CTE_REAL
%token CTE_STRING
%token DO
%token IF
%token ENDIF
%token ELSE
%token PUT
%token GET
%token DECLARE
%token ENDDECLARE
%token BEGIN
%token ENDPROGRAM
%token INT
%token REAL
%token STRING
%token REPEAT
%token CONST
%left AND OR
%left OP_SUM OP_RESTA
%left OP_MULT
%left OP_DIV
%right ASIG
%right SUMASIG
%right RESTASIG
%right MULTASIG
%right DIVASIG
%%
programa: BEGIN declar sentencias ENDPROGRAM {printf("programa: BEGIN declar sentencias ENDPROGRAM \n");}
| BEGIN sentencias ENDPROGRAM {printf("programa: BEGIN sentencias ENDPROGRAM \n");};
sentencias: sentencia {printf("sentencia: sentencia \n");}
| sentencias sentencia {printf("sentencias: sentencia \n");};
sentencia: sent_asig {printf("sentencia: sent_asig\n");}
| sent_mult_asig {printf("sentencia: sent_mult_asig\n");}
| sent_sum_asig {printf("sentencia: sent_sum_asig");}
| sent_rest_asig {printf("sentencia: sent_rest_asig \n");}
| sent_div_asig {printf("sentencia: sent_div_asig \n");}
| asig_const {printf("sentencia: asig_const \n");}
| entrada {printf("sentencia: entrada \n");}
| salida {printf("sentencia: salida \n");}
| sent_if {printf("sentencia: sent_if \n");}
| sent_repeat {printf("sentencia: sent_repeat \n");};
sent_asig: ID {printf("something");} ASIG exp {printf("sent_asig: ID ASIG exp \n");}
| ID ASIG CTE_STRING {printf("sent_asig: ID ASIG CTE_STRING \n");}
| ID ASIG CTE_STRING CONCAT ID {printf("sent_asig: ID ASIG CTE_STRING CONCAT ID \n");}
| ID ASIG ID CONCAT CTE_STRING {printf("sent_asig: ID ASIG ID CONCAT CTE_STRING \n");};
exp: exp OP_SUM ter {printf("exp: exp OP_SUM ter\n");escribirPolaca("+");}
| exp OP_RESTA ter {printf("exp: exp OP_RESTA ter\n");escribirPolaca("-");}
| ter {printf("exp: ter\n");};
ter: ter OP_MULT factor {printf("ter: ter OP_MULT factor\n");escribirPolaca("*");}
| ter OP_DIV factor {printf("ter: ter OP_DIV factor\n");escribirPolaca("/");}
| factor {printf("ter: factor\n");};
factor: ID {printf("factor: ID\n"); escribirPolaca(Simbolos[nosalemal][0]);}
| CTE {printf("factor: CTE\n");escribirPolaca(Simbolos[nosalemal][1]);}
| CTE_REAL {printf("factor: CTE_REAL \n");escribirPolaca("CTE_REAL");};
| ABREPAR exp FINPAREN {printf("factor: ABREPAR exp FINPAREN\n");}
sent_sum_asig : ID SUMASIG ID {printf("factor: sent_sum_asig \n");}
| ID SUMASIG CTE {printf("factor: ID SUMASIG CTE \n");}
| ID SUMASIG CTE_REAL {printf("factor: ID SUMASIG CTE_REAL \n");} ;
sent_rest_asig : ID RESTASIG ID {printf("sent_rest_asig: ID RESTASIG ID \n");}
| ID RESTASIG CTE {printf("sent_rest_asig: ID RESTASIG CTE \n");}
| ID RESTASIG CTE_REAL {printf("sent_rest_asig: ID RESTASIG CTE_REAL \n");};
sent_mult_asig : ID MULTASIG ID {printf("sent_mult_asig: ID MULTASIG ID \n");}
| ID MULTASIG CTE {printf("sent_mult_asig: ID MULTASIG CTE \n");}
| ID MULTASIG CTE_REAL {printf("sent_mult_asig: ID MULTASIG CTE_REAL \n");};
sent_div_asig : ID DIVASIG ID {printf("sent_div_asig: ID DIVASIG ID \n");}
| ID DIVASIG CTE {printf("sent_div_asig : ID DIVASIG ID \n");}
| ID DIVASIG CTE_REAL {printf("sent_div_asig: ID DIVASIG ID \n");};
declar: DECLARE declaraciones ENDDECLARE {printf("declar: DECLARE declaraciones ENDDECLARE \n");};
declaraciones: dec {printf("declaraciones: dec \n");}
| dec declaraciones {printf("declaraciones: dec declaraciones \n");};
dec: REAL var {printf("dec: REAL var \n");}
| INT var {printf("dec: INT var \n");}
| STRING var {printf("dec: STRING var \n");} ;
var: ID {printf("var: ID \n");}
| ID COMA var {printf("var: ID COMA var \n");};
asig_const: CONST ID ASIG CTE {printf("asig_const: CONST ID ASIG CTE \n");}
| CONST ID ASIG CTE_REAL {printf("asig_const: CONST ID ASIG CTE_REAL \n");}
| CONST ID ASIG CTE_STRING {printf("asig_const: CONST ID ASIG CTE_STRING \n");};
entrada: PUT CTE_STRING {printf("entrada: PUT CTE_STRING \n");}
| PUT ID {printf("entrada: PUT ID \n");};
salida: GET ID {printf("salida: GET ID \n");};
sent_if: IF ABREPAR condicion FINPAREN sentencias ENDIF {printf("sent_if: IF ABREPAR condicion FINPAREN sentencias ENDIF \n");}
| IF ABREPAR condicion FINPAREN sentencias ELSE sentencias ENDIF {printf("sent_if: IF ABREPAR condicion FINPAREN sentencias ELSE sentencias ENDIF \n");}
condicion: cond {printf("condicion: cond \n");}
| cond AND cond {printf("condicion: cond AND cond\n");}
| cond OR cond {printf("condicion: cond OR cond \n");}
| NOT cond {printf("condicion: NOT cond \n");};
cond: exp MENOR exp {printf("cond: exp MENOR exp \n");apilarPilaIteracion(posicionVectorPolaca);escribirPolaca("CMP");posicionVectorPolaca++;}
| exp MAYOR exp {printf("cond: exp MENOR exp \n");}
| exp MENOR_IGU exp {printf("cond: exp MENOR exp \n");}
| exp MAYOR_IGU exp {printf("cond: exp MENOR exp \n");}
| exp COMP exp {printf("cond: exp MENOR exp \n");escribirPolaca("CMP");}
| exp DIST exp {printf("cond: exp MENOR exp \n");}
sent_repeat: DO sentencias REPEAT ABREPAR condicion FINPAREN {printf("sent_repeat: DO sentencias REPEAT ABREPAR condicion FINPAREN \n");};
%%
申し訳ありませんが私の悪い英語(スペイン語で答えることができれば、より良い)