1*cda5da8dSAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?> 2*cda5da8dSAndroid Build Coastguard Worker 3*cda5da8dSAndroid Build Coastguard Worker<!-- 4*cda5da8dSAndroid Build Coastguard Worker bison.xsl - common templates for Bison XSLT. 5*cda5da8dSAndroid Build Coastguard Worker 6*cda5da8dSAndroid Build Coastguard Worker Copyright (C) 2007-2015, 2018-2021 Free Software Foundation, Inc. 7*cda5da8dSAndroid Build Coastguard Worker 8*cda5da8dSAndroid Build Coastguard Worker This file is part of Bison, the GNU Compiler Compiler. 9*cda5da8dSAndroid Build Coastguard Worker 10*cda5da8dSAndroid Build Coastguard Worker This program is free software: you can redistribute it and/or modify 11*cda5da8dSAndroid Build Coastguard Worker it under the terms of the GNU General Public License as published by 12*cda5da8dSAndroid Build Coastguard Worker the Free Software Foundation, either version 3 of the License, or 13*cda5da8dSAndroid Build Coastguard Worker (at your option) any later version. 14*cda5da8dSAndroid Build Coastguard Worker 15*cda5da8dSAndroid Build Coastguard Worker This program is distributed in the hope that it will be useful, 16*cda5da8dSAndroid Build Coastguard Worker but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cda5da8dSAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cda5da8dSAndroid Build Coastguard Worker GNU General Public License for more details. 19*cda5da8dSAndroid Build Coastguard Worker 20*cda5da8dSAndroid Build Coastguard Worker You should have received a copy of the GNU General Public License 21*cda5da8dSAndroid Build Coastguard Worker along with this program. If not, see <https://www.gnu.org/licenses/>. 22*cda5da8dSAndroid Build Coastguard Worker --> 23*cda5da8dSAndroid Build Coastguard Worker 24*cda5da8dSAndroid Build Coastguard Worker<xsl:stylesheet version="1.0" 25*cda5da8dSAndroid Build Coastguard Worker xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 26*cda5da8dSAndroid Build Coastguard Worker xmlns:bison="https://www.gnu.org/software/bison/"> 27*cda5da8dSAndroid Build Coastguard Worker 28*cda5da8dSAndroid Build Coastguard Worker<xsl:key 29*cda5da8dSAndroid Build Coastguard Worker name="bison:symbolByName" 30*cda5da8dSAndroid Build Coastguard Worker match="/bison-xml-report/grammar/nonterminals/nonterminal" 31*cda5da8dSAndroid Build Coastguard Worker use="@name" 32*cda5da8dSAndroid Build Coastguard Worker/> 33*cda5da8dSAndroid Build Coastguard Worker<xsl:key 34*cda5da8dSAndroid Build Coastguard Worker name="bison:symbolByName" 35*cda5da8dSAndroid Build Coastguard Worker match="/bison-xml-report/grammar/terminals/terminal" 36*cda5da8dSAndroid Build Coastguard Worker use="@name" 37*cda5da8dSAndroid Build Coastguard Worker/> 38*cda5da8dSAndroid Build Coastguard Worker<xsl:key 39*cda5da8dSAndroid Build Coastguard Worker name="bison:ruleByNumber" 40*cda5da8dSAndroid Build Coastguard Worker match="/bison-xml-report/grammar/rules/rule" 41*cda5da8dSAndroid Build Coastguard Worker use="@number" 42*cda5da8dSAndroid Build Coastguard Worker/> 43*cda5da8dSAndroid Build Coastguard Worker<xsl:key 44*cda5da8dSAndroid Build Coastguard Worker name="bison:ruleByLhs" 45*cda5da8dSAndroid Build Coastguard Worker match="/bison-xml-report/grammar/rules/rule[ 46*cda5da8dSAndroid Build Coastguard Worker @usefulness != 'useless-in-grammar']" 47*cda5da8dSAndroid Build Coastguard Worker use="lhs" 48*cda5da8dSAndroid Build Coastguard Worker/> 49*cda5da8dSAndroid Build Coastguard Worker<xsl:key 50*cda5da8dSAndroid Build Coastguard Worker name="bison:ruleByRhs" 51*cda5da8dSAndroid Build Coastguard Worker match="/bison-xml-report/grammar/rules/rule[ 52*cda5da8dSAndroid Build Coastguard Worker @usefulness != 'useless-in-grammar']" 53*cda5da8dSAndroid Build Coastguard Worker use="rhs/symbol" 54*cda5da8dSAndroid Build Coastguard Worker/> 55*cda5da8dSAndroid Build Coastguard Worker 56*cda5da8dSAndroid Build Coastguard Worker<!-- For the specified state, output: #sr-conflicts,#rr-conflicts --> 57*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="state" mode="bison:count-conflicts"> 58*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="transitions" select="actions/transitions"/> 59*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="reductions" select="actions/reductions"/> 60*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 61*cda5da8dSAndroid Build Coastguard Worker name="terminals" 62*cda5da8dSAndroid Build Coastguard Worker select=" 63*cda5da8dSAndroid Build Coastguard Worker $transitions/transition[@type='shift']/@symbol 64*cda5da8dSAndroid Build Coastguard Worker | $reductions/reduction/@symbol 65*cda5da8dSAndroid Build Coastguard Worker " 66*cda5da8dSAndroid Build Coastguard Worker /> 67*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="conflict-data"> 68*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="$terminals"> 69*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="name" select="."/> 70*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="generate-id($terminals[. = $name][1]) = generate-id(.)"> 71*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 72*cda5da8dSAndroid Build Coastguard Worker name="shift-count" 73*cda5da8dSAndroid Build Coastguard Worker select="count($transitions/transition[@symbol=$name])" 74*cda5da8dSAndroid Build Coastguard Worker /> 75*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 76*cda5da8dSAndroid Build Coastguard Worker name="reduce-count" 77*cda5da8dSAndroid Build Coastguard Worker select="count($reductions/reduction[@symbol=$name])" 78*cda5da8dSAndroid Build Coastguard Worker /> 79*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$shift-count > 0 and $reduce-count > 0"> 80*cda5da8dSAndroid Build Coastguard Worker <xsl:text>s</xsl:text> 81*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 82*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$reduce-count > 1"> 83*cda5da8dSAndroid Build Coastguard Worker <xsl:text>r</xsl:text> 84*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 85*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 86*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 87*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 88*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="string-length(translate($conflict-data, 'r', ''))"/> 89*cda5da8dSAndroid Build Coastguard Worker <xsl:text>,</xsl:text> 90*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="string-length(translate($conflict-data, 's', ''))"/> 91*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 92*cda5da8dSAndroid Build Coastguard Worker 93*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="space"> 94*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="repeat">0</xsl:param> 95*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="fill" select="' '"/> 96*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="number($repeat) >= 1"> 97*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="space"> 98*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="repeat" select="$repeat - 1"/> 99*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="fill" select="$fill"/> 100*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 101*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$fill"/> 102*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 103*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 104*cda5da8dSAndroid Build Coastguard Worker 105*cda5da8dSAndroid Build Coastguard Worker</xsl:stylesheet> 106