From 86a2a43854f81fdd2e376d2eee8d5ad70e106dea Mon Sep 17 00:00:00 2001 From: Valentin Tolmer Date: Thu, 1 Aug 2013 14:53:52 +0200 Subject: [PATCH] tests: new tests for %gprec and %precr 3 grammars: one typical, with normal test cases, one to display all the warnings introduced, and one with the errors introduced. * tests/conflicts.at: New --- tests/conflicts.at | 146 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/tests/conflicts.at b/tests/conflicts.at index bbb3f89d..d304ba21 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -17,6 +17,152 @@ AT_BANNER([[Conflicts.]]) +## ----------------- ## +## Precedence groups ## +## ----------------- ## + +# Sample use case of precedence groups and relations, working. + +AT_SETUP([Precedence groups]) + +AT_DATA_GRAMMAR([[input.y]], +[[%token CARET "^" +%token NUM BOOL '^' OR AND + +%left '+' '-' +%gprec { + %right CARET +} +%gprec boolean { + %left OR + %left AND +} +%left '*' '/' + +%precr boolean >> "^" +%precr CARET > '*' '/' '-' '+' + +%% + +stmt: + exp +| bool_exp + +exp: + NUM +| exp '+' exp +| exp '-' exp +| exp '*' exp +| exp '/' exp +| exp "^" exp + +bool_exp: + BOOL +| bool_exp AND bool_exp +| bool_exp OR bool_exp +| bool_exp CARET bool_exp +]]) + +AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, []) + +AT_CLEANUP + +## -------------------------------- ## +## Conflicting precedence relations ## +## -------------------------------- ## + +AT_SETUP([Conflicting precedence relations]) + +AT_DATA_GRAMMAR([[input.y]], +[[%token TOKEN +%precedence A +%precedence B +%precedence C +%precedence D E + +%gprec group { + %precedence F + %precedence G +} + +%precr B = C +%precr A > B +%precr C > B +%precr F > G +%precr F > A +%% +exp: + TOKEN +| exp A exp +| exp B exp +| exp C exp +| exp D exp +| exp E exp +| exp F exp +| exp G exp +]]) + +AT_BISON_CHECK([[-Wall -o input.c input.y]], 0, [], +[[input.y:20.10: warning: contradicting declaration: B = C is in conflict with the previous declaration: B > C [-Wprecedence] +input.y:21.10: warning: contradicting declaration: A > B is in conflict with the previous declaration: A < B [-Wprecedence] +input.y:22.10: warning: contradicting declaration: C > B is in conflict with the previous declaration: C = B [-Wprecedence] +input.y:23.10: warning: contradicting declaration: F > G is in conflict with the previous declaration: F < G [-Wprecedence] +input.y: warning: 27 shift/reduce conflicts [-Wconflicts-sr] +]]) + +AT_CLEANUP + +## ------------------------------ ## +## Duplicate precedence relations ## +## ------------------------------ ## + +AT_SETUP([Duplicate precedence relations]) + +AT_DATA_GRAMMAR([[input.y]], +[[%token TOKEN +%precedence A +%precedence B +%precedence C +%precedence D E + +%gprec group { + %precedence F + %precedence G +} + +%precr D = E +%precr B > A +%precr C > B +%precr G > F +%precr F > A +%precr C > group +%precr C > F +%% +exp: + TOKEN +| exp A exp +| exp B exp +| exp C exp +| exp D exp +| exp E exp +| exp F exp +| exp G exp +]]) + +AT_BISON_CHECK([[-Wall -o input.c input.y]], 0, [], +[[input.y:20.10: warning: duplicate declaration of the precedence relationship D = E [-Wprecedence] +input.y:20.10: warning: duplicate declaration of the precedence relationship E = D [-Wprecedence] +input.y:21.10: warning: duplicate declaration of the precedence relationship B > A [-Wprecedence] +input.y:22.10: warning: duplicate declaration of the precedence relationship C > B [-Wprecedence] +input.y:23.10: warning: duplicate declaration of the precedence relationship G > F [-Wprecedence] +input.y:26.10: warning: duplicate declaration of the precedence relationship C > F [-Wprecedence] +input.y: warning: 23 shift/reduce conflicts [-Wconflicts-sr] +]]) + +AT_CLEANUP + + + ## ------------------------- ## ## Token declaration order. ## ## ------------------------- ##