'/**\n * Example Whiley program, taken from the Whiley benchmark suite.\n * https://github.com/Whiley/WyBench/blob/master/src/101_interpreter/Main.whiley\n */' Literal.String.Doc
'\n\n'        Text

'import'      Keyword.Namespace
' '           Text
'whiley'      Name
'.'           Punctuation
'lang'        Name
'.'           Punctuation
'System'      Name
'\n'          Text

'import'      Keyword.Namespace
' '           Text
'whiley'      Name
'.'           Punctuation
'lang'        Name
'.'           Punctuation
'Int'         Name
'\n'          Text

'import'      Keyword.Namespace
' '           Text
'whiley'      Name
'.'           Punctuation
'io'          Name
'.'           Punctuation
'File'        Name
'\n'          Text

'import'      Keyword.Namespace
' '           Text
'string'      Name
' '           Text
'from'        Keyword.Namespace
' '           Text
'whiley'      Name
'.'           Punctuation
'lang'        Name
'.'           Punctuation
'ASCII'       Name
'\n'          Text

'import'      Keyword.Namespace
' '           Text
'char'        Name
' '           Text
'from'        Keyword.Namespace
' '           Text
'whiley'      Name
'.'           Punctuation
'lang'        Name
'.'           Punctuation
'ASCII'       Name
'\n\n'        Text

'// ====================================================' Comment.Single
'\n'          Text

'// A simple calculator for expressions' Comment.Single
'\n'          Text

'// ====================================================' Comment.Single
'\n\n'        Text

'constant'    Keyword.Declaration
' '           Text
'ADD'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'constant'    Keyword.Declaration
' '           Text
'SUB'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'1'           Literal.Number.Integer
'\n'          Text

'constant'    Keyword.Declaration
' '           Text
'MUL'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'2'           Literal.Number.Integer
'\n'          Text

'constant'    Keyword.Declaration
' '           Text
'DIV'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'3'           Literal.Number.Integer
'\n\n'        Text

'// binary operation' Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'BOp'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'('           Punctuation
'int'         Keyword.Type
' '           Text
'x'           Name
')'           Punctuation
' '           Text
'where'       Keyword.Reserved
' '           Text
'ADD'         Name
' '           Text
'<'           Operator
'='           Operator
' '           Text
'x'           Name
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'x'           Name
' '           Text
'<'           Operator
'='           Operator
' '           Text
'DIV'         Name
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'BinOp'       Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'BOp'         Name
' '           Text
'op'          Name
','           Punctuation
' '           Text
'Expr'        Name
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'Expr'        Name
' '           Text
'rhs'         Name
' '           Text
'}'           Punctuation
' \n\n'       Text

'// variables' Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Var'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'string'      Name
' '           Text
'id'          Name
' '           Text
'}'           Punctuation
'\n\n'        Text

'// list access' Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'ListAccess'  Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' \n    '     Text
'Expr'        Name
' '           Text
'src'         Name
','           Punctuation
' \n    '     Text
'Expr'        Name
' '           Text
'index'       Name
'\n'          Text

'}'           Punctuation
' \n\n'       Text

'// expression tree' Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Expr'        Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
' '           Text
'|'           Operator
'  '          Text
'// constant' Comment.Single
'\n    '      Text
'Var'         Name
' '           Text
'|'           Operator
'              ' Text
'// variable' Comment.Single
'\n    '      Text
'BinOp'       Name
' '           Text
'|'           Operator
'            ' Text
'// binary operator' Comment.Single
'\n    '      Text
'Expr'        Name
'['           Punctuation
']'           Punctuation
' '           Text
'|'           Operator
'           ' Text
'// array constructor' Comment.Single
'\n    '      Text
'ListAccess'  Name
'         '   Text
'// list access' Comment.Single
'\n\n'        Text

'// values'   Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Value'       Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
' '           Text
'|'           Operator
' '           Text
'Value'       Name
'['           Punctuation
']'           Punctuation
'\n\n'        Text

'// stmts'    Comment.Single
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Print'       Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'Expr'        Name
' '           Text
'rhs'         Name
' '           Text
'}'           Punctuation
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Set'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'string'      Name
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'Expr'        Name
' '           Text
'rhs'         Name
' '           Text
'}'           Punctuation
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Stmt'        Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'Print'       Name
' '           Text
'|'           Operator
' '           Text
'Set'         Name
'\n\n'        Text

'// ====================================================' Comment.Single
'\n'          Text

'// Expression Evaluator' Comment.Single
'\n'          Text

'// ====================================================' Comment.Single
'\n\n'        Text

'type'        Keyword.Declaration
' '           Text
'RuntimeError' Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'string'      Name
' '           Text
'msg'         Name
' '           Text
'}'           Punctuation
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'Environment' Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'['           Punctuation
'{'           Punctuation
'string'      Name
' '           Text
'k'           Name
','           Punctuation
' '           Text
'Value'       Name
' '           Text
'v'           Name
'}'           Punctuation
']'           Punctuation
'\n\n'        Text

'// Evaluate an expression in a given environment reducing either to a' Comment.Single
'\n'          Text

'// value, or a runtime error.  The latter occurs if evaluation gets' Comment.Single
'\n'          Text

'// "stuck" (e.g. expression is // not well-formed)' Comment.Single
'\n'          Text

'function'    Keyword.Declaration
' '           Text
'evaluate'    Name
'('           Punctuation
'Expr'        Name
' '           Text
'e'           Name
','           Punctuation
' '           Text
'Environment' Name
' '           Text
'env'         Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'Value'       Name
' '           Text
'|'           Operator
' '           Text
'RuntimeError' Name
':'           Operator
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'e'           Name
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'Var'         Name
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'env'         Name
'['           Punctuation
'e'           Name
'.'           Punctuation
'id'          Name
']'           Punctuation
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'BinOp'       Name
':'           Operator
'\n        '  Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'lhs'         Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
'e'           Name
'.'           Punctuation
'lhs'         Name
','           Punctuation
' '           Text
'env'         Name
')'           Punctuation
'\n        '  Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'rhs'         Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
'e'           Name
'.'           Punctuation
'rhs'         Name
','           Punctuation
' '           Text
'env'         Name
')'           Punctuation
'\n        '  Text
'// check if stuck' Comment.Single
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'lhs'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'rhs'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
')'           Punctuation
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'msg'         Name
':'           Operator
' '           Text
'"'           Literal.String
'arithmetic attempted on non-numeric value' Literal.String
'"'           Literal.String
'}'           Punctuation
'\n        '  Text
'// switch statement would be good' Comment.Single
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
'.'           Punctuation
'op'          Name
' '           Text
'='           Operator
'='           Operator
' '           Text
'ADD'         Name
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'lhs'         Name
' '           Text
'+'           Operator
' '           Text
'rhs'         Name
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
'.'           Punctuation
'op'          Name
' '           Text
'='           Operator
'='           Operator
' '           Text
'SUB'         Name
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'lhs'         Name
' '           Text
'-'           Operator
' '           Text
'rhs'         Name
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
'.'           Punctuation
'op'          Name
' '           Text
'='           Operator
'='           Operator
' '           Text
'MUL'         Name
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'lhs'         Name
' '           Text
'*'           Operator
' '           Text
'rhs'         Name
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'rhs'         Name
' '           Text
'!'           Operator
'='           Operator
' '           Text
'0'           Literal.Number.Integer
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'lhs'         Name
' '           Text
'/'           Operator
' '           Text
'rhs'         Name
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'msg'         Name
':'           Operator
' '           Text
'"'           Literal.String
'divide-by-zero' Literal.String
'"'           Literal.String
'}'           Punctuation
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'Expr'        Name
'['           Punctuation
']'           Punctuation
':'           Operator
'\n        '  Text
'['           Punctuation
'Value'       Name
']'           Punctuation
' '           Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'['           Punctuation
']'           Punctuation
'\n        '  Text
'for'         Keyword.Reserved
' '           Text
'i'           Name
' '           Text
'in'          Keyword.Reserved
' '           Text
'e'           Name
':'           Operator
'\n            ' Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'v'           Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
'i'           Name
','           Punctuation
' '           Text
'env'         Name
')'           Punctuation
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
'v'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'RuntimeError' Name
':'           Operator
'\n                ' Text
'return'      Keyword.Reserved
' '           Text
'v'           Name
'\n            ' Text
'else'        Keyword.Reserved
':'           Operator
'\n                ' Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'r'           Name
' '           Text
'+'           Operator
'+'           Operator
' '           Text
'['           Punctuation
'v'           Name
']'           Punctuation
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'e'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'ListAccess'  Name
':'           Operator
'\n        '  Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'src'         Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
'e'           Name
'.'           Punctuation
'src'         Name
','           Punctuation
' '           Text
'env'         Name
')'           Punctuation
'\n        '  Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'index'       Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
'e'           Name
'.'           Punctuation
'index'       Name
','           Punctuation
' '           Text
'env'         Name
')'           Punctuation
'\n        '  Text
'// santity checks' Comment.Single
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'src'         Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'['           Punctuation
'Value'       Name
']'           Punctuation
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'index'       Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'int'         Keyword.Type
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'index'       Name
' '           Text
'>'           Operator
'='           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'index'       Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'src'         Name
'|'           Operator
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'src'         Name
'['           Punctuation
'index'       Name
']'           Punctuation
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'msg'         Name
':'           Operator
' '           Text
'"'           Literal.String
'invalid list access' Literal.String
'"'           Literal.String
'}'           Punctuation
'\n    '      Text
'else'        Keyword.Reserved
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'0'           Literal.Number.Integer
' '           Text
'// dead-code' Comment.Single
'\n\n'        Text

'// ====================================================' Comment.Single
'\n'          Text

'// Expression Parser' Comment.Single
'\n'          Text

'// ====================================================' Comment.Single
'\n\n'        Text

'type'        Keyword.Declaration
' '           Text
'State'       Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'string'      Name
' '           Text
'input'       Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'pos'         Name
' '           Text
'}'           Punctuation
'\n'          Text

'type'        Keyword.Declaration
' '           Text
'SyntaxError' Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'string'      Name
' '           Text
'msg'         Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'start'       Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'end'         Name
' '           Text
'}'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'SyntaxError' Name
'('           Punctuation
'string'      Name
' '           Text
'msg'         Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'start'       Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'end'         Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'SyntaxError' Name
':'           Operator
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
' '           Text
'msg'         Name
':'           Operator
' '           Text
'msg'         Name
','           Punctuation
' '           Text
'start'       Name
':'           Operator
' '           Text
'start'       Name
','           Punctuation
' '           Text
'end'         Name
':'           Operator
' '           Text
'end'         Name
' '           Text
'}'           Punctuation
'\n\n'        Text

'// Top-level parse method' Comment.Single
'\n'          Text

'function'    Keyword.Declaration
' '           Text
'parse'       Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Stmt'        Name
','           Punctuation
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'Var'         Name
' '           Text
'keyword'     Name
','           Punctuation
' '           Text
'Var'         Name
' '           Text
'v'           Name
'\n    '      Text
'Expr'        Name
' '           Text
'e'           Name
'\n    '      Text
'int'         Keyword.Type
' '           Text
'start'       Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'keyword'     Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseIdentifier' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'switch'      Keyword.Reserved
' '           Text
'keyword'     Name
'.'           Punctuation
'id'          Name
':'           Operator
'\n        '  Text
'case'        Keyword.Reserved
' '           Text
'"'           Literal.String
'print'       Literal.String
'"'           Literal.String
':'           Operator
'\n            ' Text
'any'         Keyword.Type
' '           Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n                ' Text
'e'           Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n                ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'rhs'         Name
':'           Operator
' '           Text
'e'           Name
'}'           Punctuation
','           Punctuation
'st'          Name
'\n            ' Text
'else'        Keyword.Reserved
':'           Operator
'\n                ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'// error case' Comment.Single
'\n        '  Text
'case'        Keyword.Reserved
' '           Text
'"'           Literal.String
'set'         Literal.String
'"'           Literal.String
':'           Operator
'\n            ' Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            ' Text
'v'           Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseIdentifier' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            ' Text
'any'         Keyword.Type
' '           Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n                ' Text
'e'           Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n                ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'lhs'         Name
':'           Operator
' '           Text
'v'           Name
'.'           Punctuation
'id'          Name
','           Punctuation
' '           Text
'rhs'         Name
':'           Operator
' '           Text
'e'           Name
'}'           Punctuation
','           Punctuation
'st'          Name
'\n            ' Text
'else'        Keyword.Reserved
':'           Operator
'\n                ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'// error case' Comment.Single
'\n        '  Text
'default'     Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'SyntaxError' Name
'('           Punctuation
'"'           Literal.String
'unknown statement' Literal.String
'"'           Literal.String
','           Punctuation
'start'       Name
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
'-'           Operator
'1'           Literal.Number.Integer
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Expr'        Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'    \n    '  Text
'//'          Comment.Single
'\n    '      Text
'Expr'        Name
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'Expr'        Name
' '           Text
'rhs'         Name
'      \n    ' Text
'// First, pass left-hand side ' Comment.Single
'\n    '      Text
'any'         Keyword.Type
' '           Text
'r'           Name
'  '          Text
'='           Operator
' '           Text
'parseMulDivExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'//    '      Comment.Single
'\n    '      Text
'lhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n    '      Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'// Second, see if there is a right-hand side' Comment.Single
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'='           Operator
'='           Operator
' '           Text
"'+'"         Literal.String.Char
':'           Operator
'\n        '  Text
'// add expression' Comment.Single
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n        '  Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'        \n        ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n            ' Text
'rhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'op'          Name
':'           Operator
' '           Text
'ADD'         Name
','           Punctuation
' '           Text
'lhs'         Name
':'           Operator
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'rhs'         Name
':'           Operator
' '           Text
'rhs'         Name
'}'           Punctuation
','           Punctuation
'st'          Name
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'='           Operator
'='           Operator
' '           Text
"'-'"         Literal.String.Char
':'           Operator
'\n        '  Text
'// subtract expression' Comment.Single
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n        '  Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'        \n        ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n            ' Text
'rhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'op'          Name
':'           Operator
' '           Text
'SUB'         Name
','           Punctuation
' '           Text
'lhs'         Name
':'           Operator
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'rhs'         Name
':'           Operator
' '           Text
'rhs'         Name
'}'           Punctuation
','           Punctuation
'st'          Name
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'    \n    '  Text
'// No right-hand side' Comment.Single
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'('           Punctuation
'lhs'         Name
','           Punctuation
'st'          Name
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseMulDivExpr' Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Expr'        Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'    \n    '  Text
'// First, parse left-hand side' Comment.Single
'\n    '      Text
'Expr'        Name
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'Expr'        Name
' '           Text
'rhs'         Name
'\n    '      Text
'any'         Keyword.Type
' '           Text
'r'           Name
'  '          Text
'='           Operator
' '           Text
'parseTerm'   Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'lhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n    '      Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'// Second, see if there is a right-hand side' Comment.Single
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'='           Operator
'='           Operator
' '           Text
"'*'"         Literal.String.Char
':'           Operator
'\n        '  Text
'// add expression' Comment.Single
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n        '  Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseMulDivExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'   \n        ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n            ' Text
'rhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'op'          Name
':'           Operator
' '           Text
'MUL'         Name
','           Punctuation
' '           Text
'lhs'         Name
':'           Operator
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'rhs'         Name
':'           Operator
' '           Text
'rhs'         Name
'}'           Punctuation
','           Punctuation
' '           Text
'st'          Name
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'='           Operator
'='           Operator
' '           Text
"'/'"         Literal.String.Char
':'           Operator
'\n        '  Text
'// subtract expression' Comment.Single
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n        '  Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseMulDivExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'        \n        ' Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'('           Punctuation
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
')'           Punctuation
':'           Operator
'\n            ' Text
'rhs'         Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'{'           Punctuation
'op'          Name
':'           Operator
' '           Text
'DIV'         Name
','           Punctuation
' '           Text
'lhs'         Name
':'           Operator
' '           Text
'lhs'         Name
','           Punctuation
' '           Text
'rhs'         Name
':'           Operator
' '           Text
'rhs'         Name
'}'           Punctuation
','           Punctuation
' '           Text
'st'          Name
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n    '      Text
'// No right-hand side' Comment.Single
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'('           Punctuation
'lhs'         Name
','           Punctuation
'st'          Name
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseTerm'   Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Expr'        Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'        \n    ' Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
':'           Operator
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'ASCII'       Name
'.'           Punctuation
'isLetter'    Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'parseIdentifier' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'ASCII'       Name
'.'           Punctuation
'isDigit'     Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'parseNumber' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'='           Operator
'='           Operator
' '           Text
"'['"         Literal.String.Char
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'parseList'   Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'SyntaxError' Name
'('           Punctuation
'"'           Literal.String
'expecting number or variable' Literal.String
'"'           Literal.String
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseIdentifier' Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Var'         Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
':'           Operator
'\n    '      Text
'//'          Comment.Single
'\n    '      Text
'string'      Name
' '           Text
'txt'         Name
' '           Text
'='           Operator
' '           Text
'"'           Literal.String
'"'           Literal.String
'\n    '      Text
'// inch forward until end of identifier reached' Comment.Single
'\n    '      Text
'while'       Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'ASCII'       Name
'.'           Punctuation
'isLetter'    Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
':'           Operator
'\n        '  Text
'txt'         Name
' '           Text
'='           Operator
' '           Text
'txt'         Name
' '           Text
'+'           Operator
'+'           Operator
' '           Text
'['           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
']'           Punctuation
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'('           Punctuation
'{'           Punctuation
'id'          Name
':'           Operator
'txt'         Name
'}'           Punctuation
','           Punctuation
' '           Text
'st'          Name
')'           Punctuation
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseNumber' Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Expr'        Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'    \n    '  Text
'// inch forward until end of identifier reached' Comment.Single
'\n    '      Text
'int'         Keyword.Type
' '           Text
'start'       Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
'\n    '      Text
'while'       Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'ASCII'       Name
'.'           Punctuation
'isDigit'     Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
':'           Operator
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'    \n    '  Text
'//'          Comment.Single
'\n    '      Text
'int'         Keyword.Type
'|'           Operator
'null'        Keyword.Constant
' '           Text
'iv'          Name
' '           Text
'='           Operator
' '           Text
'Int'         Name
'.'           Punctuation
'parse'       Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'start'       Name
'.'           Punctuation
'.'           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
'\n    '      Text
'if'          Keyword.Reserved
' '           Text
'iv'          Name
' '           Text
'='           Operator
'='           Operator
' '           Text
'null'        Keyword.Constant
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'SyntaxError' Name
'('           Punctuation
'"'           Literal.String
'Error parsing number' Literal.String
'"'           Literal.String
','           Punctuation
'start'       Name
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
')'           Punctuation
'\n    '      Text
'else'        Keyword.Reserved
':'           Operator
'\n        '  Text
'return'      Keyword.Reserved
' '           Text
'iv'          Name
','           Punctuation
' '           Text
'st'          Name
'\n\n'        Text

'function'    Keyword.Declaration
' '           Text
'parseList'   Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'('           Punctuation
'Expr'        Name
','           Punctuation
' '           Text
'State'       Name
')'           Punctuation
'|'           Operator
'SyntaxError' Name
':'           Operator
'    \n    '  Text
'//'          Comment.Single
'\n    '      Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
' '           Text
"// skip '['" Comment.Single
'\n    '      Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'['           Punctuation
'Expr'        Name
']'           Punctuation
' '           Text
'l'           Name
' '           Text
'='           Operator
' '           Text
'['           Punctuation
']'           Punctuation
' '           Text
'// initial list' Comment.Single
'\n    '      Text
'bool'        Keyword.Type
' '           Text
'firstTime'   Name
' '           Text
'='           Operator
' '           Text
'true'        Keyword.Constant
'\n    '      Text
'while'       Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'!'           Operator
'='           Operator
' '           Text
"']'"         Literal.String.Char
':'           Operator
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'firstTime'   Name
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
' '           Text
'!'           Operator
'='           Operator
' '           Text
"','"         Literal.String.Char
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'SyntaxError' Name
'('           Punctuation
'"'           Literal.String
'expecting comma' Literal.String
'"'           Literal.String
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
','           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
')'           Punctuation
'\n        '  Text
'else'        Keyword.Reserved
' '           Text
'if'          Keyword.Reserved
' '           Text
'!'           Operator
'firstTime'   Name
':'           Operator
'\n            ' Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
' '           Text
"// skip ','" Comment.Single
'\n        '  Text
'firstTime'   Name
' '           Text
'='           Operator
' '           Text
'false'       Keyword.Constant
'\n        '  Text
'any'         Keyword.Type
' '           Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parseAddSubExpr' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n        '  Text
'if'          Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
':'           Operator
'\n            ' Text
'return'      Keyword.Reserved
' '           Text
'r'           Name
'\n        '  Text
'else'        Keyword.Reserved
':'           Operator
'\n            ' Text
'Expr'        Name
' '           Text
'e'           Name
'\n            ' Text
'e'           Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'// perform annoying error check    ' Comment.Single
'\n            ' Text
'l'           Name
' '           Text
'='           Operator
' '           Text
'l'           Name
' '           Text
'+'           Operator
'+'           Operator
' '           Text
'['           Punctuation
'e'           Name
']'           Punctuation
'\n            ' Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n    '      Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'l'           Name
','           Punctuation
'st'          Name
'\n \n'       Text

'// Parse all whitespace upto end-of-file' Comment.Single
'\n'          Text

'function'    Keyword.Declaration
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'State'       Name
' '           Text
'st'          Name
')'           Punctuation
' '           Text
'-'           Operator
'>'           Operator
' '           Text
'State'       Name
':'           Operator
'\n    '      Text
'while'       Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
' '           Text
'&'           Operator
'&'           Operator
' '           Text
'ASCII'       Name
'.'           Punctuation
'isWhiteSpace' Name
'('           Punctuation
'st'          Name
'.'           Punctuation
'input'       Name
'['           Punctuation
'st'          Name
'.'           Punctuation
'pos'         Name
']'           Punctuation
')'           Punctuation
':'           Operator
'\n        '  Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'='           Operator
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'+'           Operator
' '           Text
'1'           Literal.Number.Integer
'\n    '      Text
'return'      Keyword.Reserved
' '           Text
'st'          Name
'\n\n'        Text

'// ====================================================' Comment.Single
'\n'          Text

'// Main Method' Comment.Single
'\n'          Text

'// ====================================================' Comment.Single
'\n\n'        Text

'public'      Keyword.Declaration
' '           Text
'method'      Keyword.Declaration
' '           Text
'main'        Name
'('           Punctuation
'System'      Name
'.'           Punctuation
'Console'     Name
' '           Text
'sys'         Name
')'           Punctuation
':'           Operator
'\n    '      Text
'if'          Keyword.Reserved
'('           Punctuation
'|'           Operator
'sys'         Name
'.'           Punctuation
'args'        Name
'|'           Operator
' '           Text
'='           Operator
'='           Operator
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
':'           Operator
'\n        '  Text
'sys'         Name
'.'           Punctuation
'out'         Name
'.'           Punctuation
'println'     Name
'('           Punctuation
'"'           Literal.String
'no parameter provided!' Literal.String
'"'           Literal.String
')'           Punctuation
'\n    '      Text
'else'        Keyword.Reserved
':'           Operator
'\n        '  Text
'File'        Name
'.'           Punctuation
'Reader'      Name
' '           Text
'file'        Name
' '           Text
'='           Operator
' '           Text
'File'        Name
'.'           Punctuation
'Reader'      Name
'('           Punctuation
'sys'         Name
'.'           Punctuation
'args'        Name
'['           Punctuation
'0'           Literal.Number.Integer
']'           Punctuation
')'           Punctuation
'\n        '  Text
'string'      Name
' '           Text
'input'       Name
' '           Text
'='           Operator
' '           Text
'ASCII'       Name
'.'           Punctuation
'fromBytes'   Name
'('           Punctuation
'file'        Name
'.'           Punctuation
'readAll'     Name
'('           Punctuation
')'           Punctuation
')'           Punctuation
'\n        \n        ' Text
'Environment' Name
' '           Text
'env'         Name
' '           Text
'='           Operator
' '           Text
'Environment' Name
'('           Punctuation
')'           Punctuation
'\n        '  Text
'State'       Name
' '           Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
'pos'         Name
':'           Operator
' '           Text
'0'           Literal.Number.Integer
','           Punctuation
' '           Text
'input'       Name
':'           Operator
' '           Text
'input'       Name
'}'           Punctuation
'\n        '  Text
'while'       Keyword.Reserved
' '           Text
'st'          Name
'.'           Punctuation
'pos'         Name
' '           Text
'<'           Operator
' '           Text
'|'           Operator
'st'          Name
'.'           Punctuation
'input'       Name
'|'           Operator
':'           Operator
'\n            ' Text
'Stmt'        Name
' '           Text
's'           Name
'\n            ' Text
'any'         Keyword.Type
' '           Text
'r'           Name
' '           Text
'='           Operator
' '           Text
'parse'       Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
'r'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'SyntaxError' Name
':'           Operator
'\n                ' Text
'sys'         Name
'.'           Punctuation
'out'         Name
'.'           Punctuation
'println'     Name
'('           Punctuation
'"'           Literal.String
'syntax error: ' Literal.String
'"'           Literal.String
' '           Text
'+'           Operator
'+'           Operator
' '           Text
'r'           Name
'.'           Punctuation
'msg'         Name
')'           Punctuation
'  \n                ' Text
'return'      Keyword.Reserved
'\n            ' Text
's'           Name
','           Punctuation
'st'          Name
' '           Text
'='           Operator
' '           Text
'r'           Name
'\n            ' Text
'Value'       Name
'|'           Operator
'RuntimeError' Name
' '           Text
'v'           Name
' '           Text
'='           Operator
' '           Text
'evaluate'    Name
'('           Punctuation
's'           Name
'.'           Punctuation
'rhs'         Name
','           Punctuation
'env'         Name
')'           Punctuation
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
'v'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'RuntimeError' Name
':'           Operator
'\n                ' Text
'sys'         Name
'.'           Punctuation
'out'         Name
'.'           Punctuation
'println'     Name
'('           Punctuation
'"'           Literal.String
'runtime error: ' Literal.String
'"'           Literal.String
' '           Text
'+'           Operator
'+'           Operator
' '           Text
'v'           Name
'.'           Punctuation
'msg'         Name
')'           Punctuation
' \n                ' Text
'return'      Keyword.Reserved
'\n            ' Text
'if'          Keyword.Reserved
' '           Text
's'           Name
' '           Text
'is'          Keyword.Reserved
' '           Text
'Set'         Name
':'           Operator
'\n                ' Text
'env'         Name
'['           Punctuation
's'           Name
'.'           Punctuation
'lhs'         Name
']'           Punctuation
' '           Text
'='           Operator
' '           Text
'v'           Name
'\n            ' Text
'else'        Keyword.Reserved
':'           Operator
'\n                ' Text
'sys'         Name
'.'           Punctuation
'out'         Name
'.'           Punctuation
'println'     Name
'('           Punctuation
'r'           Name
')'           Punctuation
'\n            ' Text
'st'          Name
' '           Text
'='           Operator
' '           Text
'parseWhiteSpace' Name
'('           Punctuation
'st'          Name
')'           Punctuation
'\n            \n' Text
