[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 5/7] tests: new tests for %gprec and %precr
From: |
Valentin Tolmer |
Subject: |
[PATCH 5/7] tests: new tests for %gprec and %precr |
Date: |
Thu, 1 Aug 2013 16:04:53 +0200 |
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 bbb3f89..d304ba2 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. ##
## ------------------------- ##
--
1.7.9.5
- [PATCH 0/7] new partial order precedence syntax, Valentin Tolmer, 2013/08/01
- [PATCH 7/7] news: new syntax (%gprec and %precr), Valentin Tolmer, 2013/08/01
- [PATCH 6/7] regen, Valentin Tolmer, 2013/08/01
- [PATCH 2/7] conflicts: switch to partial order precedence system, Valentin Tolmer, 2013/08/01
- [PATCH 5/7] tests: new tests for %gprec and %precr,
Valentin Tolmer <=
- [PATCH 1/7] introduction of the new structures to prepare for partial order precedence, Valentin Tolmer, 2013/08/01
- [PATCH 3/7] syntax: introducing %gprec for precedence groups, Valentin Tolmer, 2013/08/01
- [PATCH 4/7] syntax: introducing %precr to add specific precedence relations, Valentin Tolmer, 2013/08/01