Grammar

This grammar is LALR(1)

Number of Rules 6

Number of Terminals 5

Number of Lr0 States8

Number of La States0

BNF

Accept ::= messageHeader

1: messageHeader ::= messageHeaders CRLF

2: messageHeaders ::= messageHeaders fieldName COLON fieldValue CRLF

3: messageHeaders ::=

4: fieldValue ::= line LWS fieldValue

5: fieldValue ::= line

Terminals

line = '[^\r\n]+'

fieldName = '[^\x00-\x20\(\)<>@\,;:\\"/\[\]\?=\{\}\t]+'

COLON = '[ \t]*:[ \t]*'

CRLF = '\r\n'

LWS = '\r\n[ \t]+'

States

State 1

( )

Accept->.messageHeader

messageHeaders->. (3)

messageHeader Goto 2

messageHeaders Goto 3

CRLF Reduce 3

fieldName Reduce 3

State 2

( 1 )

Accept->messageHeader . (0)

Accept->messageHeader . (0)

Eof Reduce 0

State 3

( 1 )

messageHeader->messageHeaders .CRLF

messageHeaders->messageHeaders .fieldName COLON fieldValue CRLF

fieldName Shift 4

CRLF Sh/Rd 1

State 4

( 3 )

messageHeaders->messageHeaders fieldName .COLON fieldValue CRLF

COLON Shift 5

State 5

( 4 )

messageHeaders->messageHeaders fieldName COLON .fieldValue CRLF

line Shift 7

fieldValue Goto 6

State 6

( 5 )

messageHeaders->messageHeaders fieldName COLON fieldValue .CRLF

CRLF Sh/Rd 2

State 7

( 5 8 )

fieldValue->line .LWS fieldValue

fieldValue->line . (5)

fieldValue->line . (5)

LWS Shift 8

CRLF Reduce 5

State 8

( 7 )

fieldValue->line LWS .fieldValue

line Shift 7

fieldValue Gt/Rd 4

First Map for Nonterminals

messageHeaders ==>> { fieldName Empty}

fieldValue ==>> { line}

messageHeader ==>> { fieldName CRLF}

Accept ==>> { fieldName CRLF}

Closure for Nonterminals

messageHeaders ==>> {}

fieldValue ==>> {}

messageHeader ==>> { messageHeaders}

Accept ==>> { messageHeaders messageHeader}

Nullable Nonterminals

messageHeaders ==>> true

fieldValue ==>> false

messageHeader ==>> false

Accept ==>> false