'/**\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