From 746ee38c7cff93ad1fc97da6f06f124f394fb437 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 21 Apr 2009 22:17:25 +0200 Subject: [PATCH] tests: check the use of dashes and periods in symbols. * tests/input.at (Symbol): New test group. --- ChangeLog | 5 +++++ tests/input.at | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/ChangeLog b/ChangeLog index f763ca36..8adc86ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-04-21 Akim Demaille + + tests: check the use of dashes and periods in symbols. + * tests/input.at (Symbol): New test group. + 2009-04-21 Joel E. Denny Document %define lr.type and lr.default_rules. diff --git a/tests/input.at b/tests/input.at index ec227df3..71adf0b7 100644 --- a/tests/input.at +++ b/tests/input.at @@ -610,6 +610,65 @@ AT_BISON_CHECK([-o input.c input.y]) AT_CLEANUP +## -------------- ## +## Symbol names. ## +## -------------- ## + +AT_SETUP([Symbols]) + +# Bison once thought a character token and its alias were different +# symbols with the same user token number. + +AT_DATA_GRAMMAR([input.y], +[[%token WITH-DASH +%token WITHOUT_DASH "WITHOUT-DASH" +%token WITH.PERIOD +%token WITHOUT_PERIOD "WITHOUT.PERIOD" +%% +start: with-dash without_dash with.period without_period; +with-dash: WITH-DASH; +without_dash: "WITHOUT-DASH"; +with.period: WITH.PERIOD; +without_period: "WITHOUT.PERIOD"; +%% +]]) + +# POSIX Yacc accept periods, but not dashes. +AT_BISON_CHECK([--yacc input.y], [1], [], +[[input.y:9.8-16: POSIX Yacc forbids dashes in symbol names: WITH-DASH +input.y:14.8-16: POSIX Yacc forbids dashes in symbol names: with-dash +]]) + +# So warn about them. +AT_BISON_CHECK([-Wyacc input.y], [], [], +[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH +input.y:14.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash +]]) + +# Dashes are fine for GNU Bison. +AT_BISON_CHECK([-o input.c input.y]) + +# Make sure we don't export silly token identifiers with periods or dashes. +AT_COMPILE([input.o], [-c input.c]) + + +# Period are genuine letters, they can start identifiers. Dashes +# and digits can't. +AT_DATA_GRAMMAR([input.y], +[[%token .good +%token -wrong +%token 1nv4l1d +%% +start: .good +]]) +AT_BISON_CHECK([-o input.c input.y], [1], [], +[[input.y:10.8: invalid character: `-' +input.y:11.8: syntax error, unexpected integer, expecting char or identifier or +]]) + +AT_CLEANUP + + ## --------------------- ## ## Unclosed constructs. ## ## --------------------- ## -- 2.45.2