%{ my $INT = '(int)\b'; my $ID = '([a-zA-Z_][a-zA-Z_0-9]*)'; my $NUM = '(\d+)'; %} %token NUM = /$NUM/ %token INT = /$INT/ %token ID = /$ID/ %right '=' %left '+' %% decl: %name DECLARATOR INT declarator ';' | %name DECLARATORINIT INT declarator '=' expr ';' ; expr: %name ID:EXP ID | %name NUM NUM | %name TYPECAST INT '(' expr ')' /* typecast */ | %name PLUS expr '+' expr | %name ASSIGN expr '=' expr ; declarator: %name ID:DEC ID | '(' declarator ')' ; %%