Grammar

This grammar is LALR(1)

Number of Rules 17

Number of Terminals 8

Number of Lr0 States9

Number of La States0

BNF

Accept ::= attributesSub

1: attributesSub ::= attributes s? tagType

2: attributes ::=

3: attributes ::= attributes s attribute

6: tagType ::= emptyTag

7: tagType ::= contentTag

8: attribute ::= qName eq attValue

9: attribute ::= nsAttName eq attValue

10: emptyTag ::= '/'

11: contentTag ::=

12: eq ::= '='

13: attValue ::= quotAttValueStart

14: attValue ::= aposAttValueStart

15: quotAttValueStart ::= '"'

16: aposAttValueStart ::= '''

Terminals

Eof(endTag) = '>'

s = '[\x20\x09\x0A]+'

qName = '[A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}][A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}\-\.0-9\xB7\u0300-\u036F\u203F-\u2040]*(:[A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}][A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}\-\.0-9\xB7\u0300-\u036F\u203F-\u2040]*)?'

nsAttName = 'xmlns(:[A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}][A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\x{10000}-\x{10FFFF}\-\.0-9\xB7\u0300-\u036F\u203F-\u2040]*)?'

States

State 1

( )

Accept->.attributesSub

attributes->. (2)

attributesSub Goto 2

attributes Goto 3

s Reduce 2

'/' Reduce 2

Eof Reduce 2

State 2

( 1 )

Accept->attributesSub . (0)

Accept->attributesSub . (0)

Eof Reduce 0

State 3

( 1 )

attributesSub->attributes .s? tagType

attributes->attributes .s attribute

s?->. (5)

s Shift 5

s? Goto 4

'/' Reduce 5

Eof Reduce 5

State 4

( 3 )

attributesSub->attributes s? .tagType

contentTag->. (11)

'/' Sh/Rd 10

tagType Gt/Rd 1

contentTag Gt/Rd 7

emptyTag Gt/Rd 6

Eof Reduce 11

State 5

( 3 )

attributes->attributes s .attribute

s?->s . (4)

s?->s . (4)

nsAttName Shift 6

qName Shift 7

attribute Gt/Rd 3

'/' Reduce 4

Eof Reduce 4

State 6

( 5 )

attribute->nsAttName .eq attValue

'=' Sh/Rd 12

eq Goto 8

State 7

( 5 )

attribute->qName .eq attValue

'=' Sh/Rd 12

eq Goto 9

State 8

( 6 )

attribute->nsAttName eq .attValue

''' Sh/Rd 16

'"' Sh/Rd 15

attValue Gt/Rd 9

aposAttValueStart Gt/Rd 14

quotAttValueStart Gt/Rd 13

State 9

( 7 )

attribute->qName eq .attValue

''' Sh/Rd 16

'"' Sh/Rd 15

attValue Gt/Rd 8

aposAttValueStart Gt/Rd 14

quotAttValueStart Gt/Rd 13

First Map for Nonterminals

quotAttValueStart ==>> { '"'}

emptyTag ==>> { '/'}

tagType ==>> { '/' Empty}

contentTag ==>> { Empty}

attributesSub ==>> { s '/' Empty}

attribute ==>> { qName nsAttName}

aposAttValueStart ==>> { '''}

attributes ==>> { Empty s}

s? ==>> { s Empty}

attValue ==>> { '"' '''}

eq ==>> { '='}

Accept ==>> { s '/' Eof(endTag)}

Closure for Nonterminals

quotAttValueStart ==>> {}

emptyTag ==>> {}

tagType ==>> { contentTag emptyTag}

contentTag ==>> {}

attributesSub ==>> { attributes}

attribute ==>> {}

aposAttValueStart ==>> {}

attributes ==>> {}

s? ==>> {}

attValue ==>> { aposAttValueStart quotAttValueStart}

eq ==>> {}

Accept ==>> { attributes attributesSub}

Nullable Nonterminals

quotAttValueStart ==>> false

emptyTag ==>> false

tagType ==>> true

contentTag ==>> true

attributesSub ==>> true

attribute ==>> false

aposAttValueStart ==>> false

attributes ==>> true

s? ==>> true

attValue ==>> false

eq ==>> false

Accept ==>> false