There is no grammatical ambiguity by using T_WORD for variables. The parser can distinguish variables from symbols from the context.
Showing the changes to scripts (2 of 2 files). Show all
Unified · Split
| @@ -109,13 +109,13 @@ n [A-Za-z0-9_-] · 108 unmodified lines | |||
| 109 | } | 109 | } |
| 110 | alloc_string(yytext, yyleng); | 110 | alloc_string(yytext, yyleng); |
| 111 | yylval.string = text; | 111 | yylval.string = text; |
| 112 | return T_VARIABLE; | 112 | return T_WORD; |
| 113 | } | 113 | } |
| 114 | ({n}|$)+ { | 114 | ({n}|$)+ { |
| 115 | /* this token includes at least one '$' */ | 115 | /* this token includes at least one '$' */ |
| 116 | yylval.string = expand_token(yytext, yyleng); | 116 | yylval.string = expand_token(yytext, yyleng); |
| 117 | if (strlen(yylval.string)) | 117 | if (strlen(yylval.string)) |
| 118 | return T_VARIABLE; | 118 | return T_WORD; |
| 119 | free(yylval.string); | 119 | free(yylval.string); |
| 120 | } | 120 | } |
| 121 | "=" { BEGIN(ASSIGN_VAL); return T_EQUAL; } | 121 | "=" { BEGIN(ASSIGN_VAL); return T_EQUAL; } |
| @@ -84,7 +84,6 @@ static struct menu *current_menu, *current_entry; · 83 unmodified lines | |||
| 84 | %token T_STRING | 84 | %token T_STRING |
| 85 | %token T_TRISTATE | 85 | %token T_TRISTATE |
| 86 | %token T_EOL | 86 | %token T_EOL |
| 87 | %token <string> T_VARIABLE | ||
| 88 | %token <string> T_ASSIGN_VAL | 87 | %token <string> T_ASSIGN_VAL |
| 89 | 88 | ||
| 90 | %left T_OR | 89 | %left T_OR |
| @@ -480,7 +479,7 @@ word_opt: /* empty */ { $$ = NULL; } · 389 unmodified lines | |||
| 480 | 479 | ||
| 481 | /* assignment statement */ | 480 | /* assignment statement */ |
| 482 | 481 | ||
| 483 | assignment_stmt: T_VARIABLE assign_op assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } | 482 | assignment_stmt: T_WORD assign_op assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } |
| 484 | 483 | ||
| 485 | assign_op: | 484 | assign_op: |
| 486 | T_EQUAL { $$ = VAR_RECURSIVE; } | 485 | T_EQUAL { $$ = VAR_RECURSIVE; } |