[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
graph: prefer *.gv to *.dot (was: bison info doc - precedence in recurs
From: |
Akim Demaille |
Subject: |
graph: prefer *.gv to *.dot (was: bison info doc - precedence in recursive parsing) |
Date: |
Tue, 19 Feb 2019 19:35:21 +0100 |
> Le 17 févr. 2019 à 16:19, Akim Demaille <address@hidden> a écrit :
>
>
>> Le 10 févr. 2019 à 15:20, Hans Åberg <address@hidden> a écrit :
>>
>>> On 10 Feb 2019, at 11:07, Akim Demaille <address@hidden> wrote:
>>>
>>> [*.dot vs. *.gv]
>>> But it's too late to change the default behavior.
>>
>> You might change it, as it is not usable on real life grammars.
>
> You have a point :)
>
> But it does not mean it will not break something for someone.
> Maybe bound to %require "3.4", why not.
Here is my proposal. Maybe at some point we should change the default for
grammars without %require from *.dot to *.gv. Versions with a %require before
3.4 would still produce *.dot.
commit 90067b14bf744d725387a284a42030f028feebbc
Author: Akim Demaille <address@hidden>
Date: Tue Feb 19 18:16:02 2019 +0100
graph: prefer *.gv to *.dot
Reported by Hans Åberg.
https://lists.gnu.org/archive/html/help-bison/2019-02/msg00064.html
* src/files.c (spec_graph_file): Use `*.gv` when 3.4 or better,
otherwise `*.dot`.
* src/parse-gram.y (handle_require): Pretend we are already 3.4.
* doc/bison.texi: Adjust.
* tests/local.at, tests/output.at: Exercise this.
diff --git a/NEWS b/NEWS
index fab5148c..5352e043 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,12 @@ GNU Bison NEWS
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Changes
+
+ In conformance with the recommendations of the GraphViz team, if %require
+ "3.4" (or better) is specified, the option --graph generates a *.gv file
+ by default, instead of *.dot.
+
** New features
*** Disabling output
@@ -14,6 +20,9 @@ GNU Bison NEWS
A new example in C shows an simple infix calculator with a hand-written
scanner (examples/c/calc).
+ A new example in C shows a reentrant parser (capable of recursive calls)
+ built with Flex and Bison (examples/c/reccalc).
+
* Noteworthy changes in release 3.3.2 (2019-02-03) [stable]
** Bug fixes
diff --git a/doc/bison.texi b/doc/bison.texi
index 631f27e4..4563caa4 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -4795,10 +4795,16 @@ status 63).
@end example
Some deprecated behaviors are disabled for some required @var{version}:
address@hidden @code
address@hidden "3.2"
address@hidden @asis
address@hidden @code{"3.2"} (or better)
The C++ deprecated files @file{position.hh} and @file{stack.hh} are no
longer generated.
+
address@hidden @code{"3.4"} (or better)
+To comply with the
address@hidden://marc.info/?l=graphviz-devel&m=129418103126092, recommendations
+of the GraphViz team}, use the @code{.gv} extension instead of @code{.dot}
+for the name of the generated DOT file. @xref{Graphviz}.
@end table
@@ -6137,12 +6143,12 @@ start: FILE for ERROR;
@end example
@noindent
-generates the definition of the symbols @code{TOK_FILE}, @code{TOK_for},
-and @code{TOK_ERROR} in the generated source files. In particular, the
-scanner must use these prefixed token names, while the grammar itself
-may still use the short names (as in the sample rule given above). The
-generated informational files (@file{*.output}, @file{*.xml},
address@hidden) are not modified by this prefix.
+generates the definition of the symbols @code{TOK_FILE}, @code{TOK_for}, and
address@hidden in the generated source files. In particular, the scanner
+must use these prefixed token names, while the grammar itself may still use
+the short names (as in the sample rule given above). The generated
+informational files (@file{*.output}, @file{*.xml}, @file{*.gv}) are not
+modified by this prefix.
Bison also prefixes the generated member names of the semantic value union.
@xref{Type Generation,, Generating the Semantic Value Type}, for more
@@ -9732,8 +9738,8 @@ to help them understand LR parsers.
This file is generated when the @option{--graph} option is specified
(@pxref{Invocation, , Invoking Bison}). Its name is made by removing
@samp{.tab.c} or @samp{.c} from the parser implementation file name, and
-adding @samp{.dot} instead. If the grammar file is @file{foo.y}, the
-Graphviz output file is called @file{foo.dot}. A DOT file may also be
+adding @samp{.gv} instead. If the grammar file is @file{foo.y}, the
+Graphviz output file is called @file{foo.gv}. A DOT file may also be
produced via an XML file and XSLT processing (@pxref{Xml,,Visualizing your
parser in multiple formats}).
@@ -10767,12 +10773,12 @@ described under the @samp{-v} and @samp{-d} options.
@item -g address@hidden
@itemx address@hidden
-Output a graphical representation of the parser's
-automaton computed by Bison, in @uref{http://www.graphviz.org/, Graphviz}
+Output a graphical representation of the parser's automaton computed by
+Bison, in @uref{http://www.graphviz.org/, Graphviz}
@uref{http://www.graphviz.org/doc/info/lang.html, DOT} format.
address@hidden@var{file}} is optional.
-If omitted and the grammar file is @file{foo.y}, the output file will be
address@hidden
address@hidden@var{file}} is optional. If omitted and the grammar file is
address@hidden, the output file will be @file{foo.gv} if the @code{%required}
+version is 3.4 or better, @file{foo.dot} otherwise.
@item -x address@hidden
@itemx address@hidden
diff --git a/src/files.c b/src/files.c
index 688ea338..d272c222 100644
--- a/src/files.c
+++ b/src/files.c
@@ -342,7 +342,8 @@ compute_output_file_names (void)
if (graph_flag)
{
if (! spec_graph_file)
- spec_graph_file = concat2 (all_but_tab_ext, ".dot");
+ spec_graph_file = concat2 (all_but_tab_ext,
+ 304 <= required_version ? ".gv" : ".dot");
output_file_name_check (&spec_graph_file, false);
}
diff --git a/src/parse-gram.y b/src/parse-gram.y
index 3d0b99bc..b01c4e83 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -958,10 +958,9 @@ handle_require (location const *loc, char const *version)
return;
}
required_version = major * 100 + minor;
- /* Pretend to be at least 3.2, even if we are only 3.1-211, as it
- allows us to check features published in 3.2 while developping
- 3.2. */
- const char* api_version = "3.2";
+ /* Pretend to be at least 3.4, to check features published in 3.4
+ while developping it. */
+ const char* api_version = "3.4";
const char* package_version =
strverscmp (api_version, PACKAGE_VERSION) > 0
? api_version : PACKAGE_VERSION;
diff --git a/tests/.gitignore b/tests/.gitignore
index 70ae9c31..19f357fb 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,8 +1,6 @@
-/*.dot
/*.output
/atconfig
/atlocal
-/autom4te.cache
/bison
/calc
/calc.[chy]
diff --git a/tests/local.at b/tests/local.at
index 0bd0ce5c..6f81fdb3 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -752,7 +752,7 @@ m4_define([AT_BISON_CHECK_XML],
# Don't combine these Bison invocations since we want to be sure that
# --report=all isn't required to get the full XML file.
AT_BISON_CHECK_([[--report=all --report-file=xml-tests/test.output \
- --graph=xml-tests/test.dot ]]AT_BISON_ARGS,
+ --graph=xml-tests/test.gv ]]AT_BISON_ARGS,
[[0]], [ignore], [ignore])
AT_BISON_CHECK_([[--xml=xml-tests/test.xml ]]AT_BISON_ARGS,
[[0]], [ignore], [ignore])
@@ -761,7 +761,7 @@ m4_define([AT_BISON_CHECK_XML],
AT_CHECK([[$XSLTPROC \
`]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2text.xsl \
xml-tests/test.xml]], [[0]], [expout])
- [sort xml-tests/test.dot > expout]
+ [sort xml-tests/test.gv > expout]
AT_CHECK([[$XSLTPROC \
`]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2dot.xsl \
xml-tests/test.xml | sort]], [[0]], [expout])
diff --git a/tests/output.at b/tests/output.at
index 31b41694..11ef8731 100644
--- a/tests/output.at
+++ b/tests/output.at
@@ -76,6 +76,8 @@ AT_CHECK_OUTPUT([foo.y], [], [-dv -o foo.tab.c],
AT_CHECK_OUTPUT([foo.y], [], [-dv -g --xml -y],
[y.dot y.output y.tab.c y.tab.h y.xml])
+AT_CHECK_OUTPUT([foo.y], [%require "3.4"], [-dv -g --xml -y],
+ [y.gv y.output y.tab.c y.tab.h y.xml])
# With '-o y.tab.c', we expect 'y.output' etc. (for compatibility with Yacc).
AT_CHECK_OUTPUT([foo.y], [], [-dv -g --xml -o y.tab.c],
[y.dot y.output y.tab.c y.tab.h y.xml])
- graph: prefer *.gv to *.dot (was: bison info doc - precedence in recursive parsing),
Akim Demaille <=