Whitespace and Command-Separating Lexemes

In all lexical states, unescaped newlines produce the NEWLINE token and change the lexical state to be LKEYWORD.

Initial State

LKEYWORD, LNORM, LFILE, LLINE, LWORD, LSIGNAL, LBPT

Regular Expression: [\n]
Lexeme: NEWLINE
Change to State: LKEYWORD

In all lexical states except LLINE, a semicolon also changes the lexical state to be LKEYWORD.

This is because SEMICOLON is the command separator.

Initial State

LKEYWORD, LNORM, LFILE, LSIGNAL, LBPT, LWORD

Regular Expression: ";"
Lexeme: SEMICOLON
Change to State: LKEYWORD

Commands can be nested, and the following transitions support this:

Initial State

LNORM

Regular Expression: "{"
Lexeme: LBRACE
Change to State: LKEYWORD

Initial State

LKEYWORD, LNORM, LFILE, LSIGNAL, LBPT

Regular Expression: "}"
Lexeme: RBRACE
Change to State: LKEYWORD

In most lexical states, the spaces, tabs, and escaped newlines are ignored. In the LLINE state, the spaces and tabs are part of the line, but escaped newlines are still ignored. In the LWORD state, the spaces and tabs are ignored, but escaped newlines are not.

Initial State

LKEYWORD, LNORM, LFILE, LSIGNAL, LBPT

Regular Expression: [ \t]
\\\n
Lexeme: Ignored
Change to State: Unchanged

Initial State

LLINE

Regular Expression: \\\n
Lexeme: Ignored
Change to State: Unchanged

Initial State

LWORD

Regular Expression: [ \t]
Lexeme: Ignored
Change to State: Unchanged