]> granicus.if.org Git - re2c/commit
Liveness of fallback tags is a forward-propagagation problem.
authorUlya Trofimovich <skvadrik@gmail.com>
Thu, 29 Sep 2016 17:33:51 +0000 (18:33 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Thu, 29 Sep 2016 17:33:51 +0000 (18:33 +0100)
commite11a1503f574974a412c5cb46b532d45d17a20e9
tree370aedcae025f34f99a4c00634827bf77e9e0599
parentaa67fff35310fca64dadc50c3e3fa93921c37d9e
Liveness of fallback tags is a forward-propagagation problem.

re2c used to merge all possible fallback tags and backward-propagate
them from states that have default transitions. This is an
overapproximation; some tags are marked alive while they are not.

Liveness of fallback tags should be forward-propagated, because
this is the only way to track paths that really need these tags
(that is, paths that start in final state and end with default
transition *without passing through another final state*).

Note that sometimes we can get to the same default transition
following two different paths, one path may passing through final
state; the other is not. One path cares for fallback tags; the
other doesn't. We have no way to find out if we start bacward
prpagation of fallback tags from default transition.
re2c/src/ir/dfa/dead_rules.cc
re2c/src/ir/dfa/dfa.h
re2c/src/ir/dfa/tag_deduplication.cc
re2c/test/tags/fallback1.i--tags.c [new file with mode: 0644]
re2c/test/tags/fallback1.i--tags.re [new file with mode: 0644]