Date: Tue, 29 Apr 2014 09:08:35 GMT From: Makoto Kishimoto <ksmakoto@dd.iij4u.or.jp> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/189101: In FreeBSD yacc, %nonassoc doesn't work correctly Message-ID: <201404290908.s3T98ZuL054923@cgiserv.freebsd.org> Resent-Message-ID: <201404290910.s3T9A0t0078749@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 189101 >Category: bin >Synopsis: In FreeBSD yacc, %nonassoc doesn't work correctly >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Apr 29 09:10:00 UTC 2014 >Closed-Date: >Last-Modified: >Originator: Makoto Kishimoto >Release: 10.0-RELEASE-p1 >Organization: privately >Environment: FreeBSD norikura.localdomain 10.0-RELEASE-p1 FreeBSD 10.0-RELEASE-p1 #0: Tue Apr 8 06:45:06 UTC 2014 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64 >Description: In yacc, an operator which specified %nonassoc should has non associativity, and cause syntax error for runtime ambiguous input. But FreeBSD's /usr/bin/yacc doesn't. >How-To-Repeat: ( see attached sample ) $ echo -n "1-2-3" | ./calc_by # FreeBSD BYacc -4 $ echo -n "1-2-3" | ./calc_9y # devel/9base's Yacc syntax error $ echo -n "1-2-3" | ./calc_bi # GNU Bison syntax error >Fix: Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # Makefile # calc.y # run_samples.sh # echo x - Makefile sed 's/^X//' >Makefile << '' XBYACC=/usr/bin/yacc XBISON=/usr/local/bin/bison XYACC9=/usr/local/9/bin/yacc X Xall: calc_by calc_bi calc_9y X Xcalc_by.c: calc.y X ${BYACC} -o calc_by.c calc.y X Xcalc_bi.c: calc.y X ${BISON} -o calc_bi.c calc.y X Xcalc_9y.c: calc.y X ${YACC9} -o calc_9y.c calc.y X Xclean: X rm -Rf calc_by* calc_bi* calc_9y* echo x - calc.y sed 's/^X//' >calc.y << '' X%{ X#include <ctype.h> X#include <stdio.h> X#include <stdlib.h> X Xint yyparse(void); Xstatic int yylex(void); Xstatic void yyerror(char *s); X%} X X%token NUM X X%nonassoc '-' X X%% X Xprog : expr { printf("%d\n", $1); } X Xexpr : expr '-' expr { $$ = $1 - $3; } X | NUM X ; X X%% X Xstatic int Xyylex(void) X{ X static int lastchar = -2; X X if (lastchar == -2) { X lastchar = getchar(); X } X X if (lastchar == EOF) { X return 0; X } else if (isdigit(lastchar)) { X int tmp = digittoint(lastchar); X while (isdigit(lastchar = getchar())) { X tmp = 10 * tmp + digittoint(lastchar); X } X yylval = tmp; X return NUM; X } else { X yylval = lastchar; X lastchar = getchar(); X return yylval; X } X} X Xstatic void Xyyerror(char *s) X{ X fprintf(stderr, "%s\n", s); X} X Xint Xmain(void) X{ X yyparse(); X X return 0; X} echo x - run_samples.sh sed 's/^X//' >run_samples.sh << '' X#! /bin/sh Xmake Xecho -n "1-2-3" | ./calc_by Xecho -n "1-2-3" | ./calc_9y Xecho -n "1-2-3" | ./calc_bi exit >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201404290908.s3T98ZuL054923>