diff --git a/applications/test/exprTraits/Test-exprTraits.C b/applications/test/exprTraits/Test-exprTraits.C
index 3dee3b436ffb46177c25a6784527d011fa0be93a..f6a835871d41ddea47eb9adc37c7c466b829338b 100644
--- a/applications/test/exprTraits/Test-exprTraits.C
+++ b/applications/test/exprTraits/Test-exprTraits.C
@@ -21,6 +21,7 @@ Description
 #include "uLabel.H"
 #include "error.H"
 #include "stringList.H"
+#include "exprScanToken.H"
 
 using namespace Foam;
 
@@ -71,6 +72,34 @@ int main()
         << getName(expressions::valueTypeCode::type_bool) << nl;
 
 
+    {
+        expressions::scanToken tok;
+        expressions::scanToken tok2;
+
+        Info<< nl << "sizeof(scanToken): "
+            << sizeof(tok) << nl;
+
+        Info<< "    type:" << int(tok.type_) << nl;
+        Info<< "    ptr:" << Foam::name(tok.name_) << nl;
+
+        Info<< "    type:" << int(tok2.type_) << nl;
+        Info<< "    ptr:" << Foam::name(tok2.name_) << nl;
+
+        tok.setWord("hello");
+
+        Info<< "    type:" << int(tok.type_) << nl;
+        Info<< "    ptr:" << Foam::name(tok.name_) << nl;
+
+        tok2 = tok;
+        Info<< "    type:" << int(tok2.type_) << nl;
+        Info<< "    ptr:" << Foam::name(tok2.name_) << nl;
+
+        tok2.destroy();
+
+        Info<< "    type:" << int(tok2.type_) << nl;
+        Info<< "    ptr:" << Foam::name(tok2.name_) << nl;
+    }
+
     Info<< nl << "Done" << nl;
     return 0;
 }
diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files
index 47a7a41a0d29d9040001a4740fc8c6dbd3af8bcc..d1ee7b2c6221e8e7680d6f5609b2bbc3ad9472cc 100644
--- a/src/OpenFOAM/Make/files
+++ b/src/OpenFOAM/Make/files
@@ -162,6 +162,7 @@ $(expr)/exprResult/exprResultStored.C
 $(expr)/exprResult/exprResultStoredStack.C
 $(expr)/exprString/exprString.C
 $(expr)/exprTools/exprTools.C
+$(expr)/scanToken/exprScanToken.C
 
 $(expr)/traits/exprTraits.C
 
diff --git a/src/OpenFOAM/expressions/fields/fieldExprFwd.H b/src/OpenFOAM/expressions/fields/fieldExprFwd.H
index b5fe79b206646bffa1a3f5702a515cd35898f7c9..1cc5be18395fd2daafa722807511ca3beb006927 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprFwd.H
+++ b/src/OpenFOAM/expressions/fields/fieldExprFwd.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -47,7 +47,6 @@ namespace fieldExpr
 class parser;
 class scanner;
 class parseDriver;
-union scanToken;
 
 //- Static debugging option
 extern int debug;
diff --git a/src/OpenFOAM/expressions/fields/fieldExprLemonParser.h b/src/OpenFOAM/expressions/fields/fieldExprLemonParser.h
index 3624697ee51d1d506fd896e562594ee1d042aaae..f992c6955259a0f61e350f5b4a8269b2195c5a40 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprLemonParser.h
+++ b/src/OpenFOAM/expressions/fields/fieldExprLemonParser.h
@@ -1,93 +1,99 @@
-#define TOK_QUESTION                         1
-#define TOK_COLON                            2
-#define TOK_LOR                              3
-#define TOK_LAND                             4
-#define TOK_BIT_XOR                          5
-#define TOK_BIT_AND                          6
-#define TOK_EQUAL                            7
-#define TOK_NOT_EQUAL                        8
-#define TOK_LESS_EQ                          9
-#define TOK_GREATER_EQ                      10
-#define TOK_LESS                            11
-#define TOK_GREATER                         12
-#define TOK_PLUS                            13
-#define TOK_MINUS                           14
-#define TOK_TIMES                           15
-#define TOK_DIVIDE                          16
-#define TOK_PERCENT                         17
-#define TOK_NEGATE                          18
-#define TOK_NOT                             19
-#define TOK_DOT                             20
-#define TOK_NUMBER                          21
-#define TOK_ZERO                            22
-#define TOK_PI                              23
-#define TOK_LPAREN                          24
-#define TOK_RPAREN                          25
-#define TOK_DEG_TO_RAD                      26
-#define TOK_RAD_TO_DEG                      27
-#define TOK_ARG                             28
-#define TOK_TIME                            29
-#define TOK_DELTA_T                         30
-#define TOK_SCALAR_ID                       31
-#define TOK_MIN                             32
-#define TOK_COMMA                           33
-#define TOK_MAX                             34
-#define TOK_SUM                             35
-#define TOK_AVERAGE                         36
-#define TOK_EXP                             37
-#define TOK_LOG                             38
-#define TOK_LOG10                           39
-#define TOK_SQR                             40
-#define TOK_SQRT                            41
-#define TOK_CBRT                            42
-#define TOK_SIN                             43
-#define TOK_COS                             44
-#define TOK_TAN                             45
-#define TOK_ASIN                            46
-#define TOK_ACOS                            47
-#define TOK_ATAN                            48
-#define TOK_SINH                            49
-#define TOK_COSH                            50
-#define TOK_TANH                            51
-#define TOK_POW                             52
-#define TOK_ATAN2                           53
-#define TOK_POS                             54
-#define TOK_NEG                             55
-#define TOK_POS0                            56
-#define TOK_NEG0                            57
-#define TOK_SIGN                            58
-#define TOK_FLOOR                           59
-#define TOK_CEIL                            60
-#define TOK_ROUND                           61
-#define TOK_HYPOT                           62
-#define TOK_RAND                            63
-#define TOK_VECTOR_ID                       64
-#define TOK_SPH_TENSOR_ID                   65
-#define TOK_SYM_TENSOR_ID                   66
-#define TOK_IDENTITY_TENSOR                 67
-#define TOK_TENSOR_ID                       68
-#define TOK_LTRUE                           69
-#define TOK_LFALSE                          70
-#define TOK_BOOL                            71
-#define TOK_BOOL_ID                         72
-#define TOK_MAG                             73
-#define TOK_MAGSQR                          74
-#define TOK_VECTOR                          75
-#define TOK_TENSOR                          76
-#define TOK_SYM_TENSOR                      77
-#define TOK_SPH_TENSOR                      78
-#define TOK_CMPT_X                          79
-#define TOK_CMPT_Y                          80
-#define TOK_CMPT_Z                          81
-#define TOK_CMPT_XX                         82
-#define TOK_CMPT_XY                         83
-#define TOK_CMPT_XZ                         84
-#define TOK_CMPT_YX                         85
-#define TOK_CMPT_YY                         86
-#define TOK_CMPT_YZ                         87
-#define TOK_CMPT_ZX                         88
-#define TOK_CMPT_ZY                         89
-#define TOK_CMPT_ZZ                         90
-#define TOK_CMPT_II                         91
-#define TOK_TRANSPOSE                       92
-#define TOK_DIAG                            93
+#define TOK_LPAREN                           1
+#define TOK_RPAREN                           2
+#define TOK_COMMA                            3
+#define TOK_QUESTION                         4
+#define TOK_COLON                            5
+#define TOK_LOR                              6
+#define TOK_LAND                             7
+#define TOK_LNOT                             8
+#define TOK_BIT_OR                           9
+#define TOK_BIT_XOR                         10
+#define TOK_BIT_AND                         11
+#define TOK_BIT_NOT                         12
+#define TOK_EQUAL                           13
+#define TOK_NOT_EQUAL                       14
+#define TOK_LESS                            15
+#define TOK_LESS_EQ                         16
+#define TOK_GREATER                         17
+#define TOK_GREATER_EQ                      18
+#define TOK_PLUS                            19
+#define TOK_MINUS                           20
+#define TOK_TIMES                           21
+#define TOK_DIVIDE                          22
+#define TOK_PERCENT                         23
+#define TOK_NEGATE                          24
+#define TOK_DOT                             25
+#define TOK_BOOL                            26
+#define TOK_LTRUE                           27
+#define TOK_LFALSE                          28
+#define TOK_NUMBER                          29
+#define TOK_ZERO                            30
+#define TOK_IDENTIFIER                      31
+#define TOK_PI                              32
+#define TOK_DEG_TO_RAD                      33
+#define TOK_RAD_TO_DEG                      34
+#define TOK_ARG                             35
+#define TOK_TIME                            36
+#define TOK_DELTA_T                         37
+#define TOK_SCALAR_FUNCTION_ID              38
+#define TOK_VECTOR_VALUE                    39
+#define TOK_VECTOR_FUNCTION_ID              40
+#define TOK_SCALAR_ID                       41
+#define TOK_MIN                             42
+#define TOK_MAX                             43
+#define TOK_SUM                             44
+#define TOK_AVERAGE                         45
+#define TOK_EXP                             46
+#define TOK_LOG                             47
+#define TOK_LOG10                           48
+#define TOK_SQR                             49
+#define TOK_SQRT                            50
+#define TOK_CBRT                            51
+#define TOK_SIN                             52
+#define TOK_COS                             53
+#define TOK_TAN                             54
+#define TOK_ASIN                            55
+#define TOK_ACOS                            56
+#define TOK_ATAN                            57
+#define TOK_SINH                            58
+#define TOK_COSH                            59
+#define TOK_TANH                            60
+#define TOK_POW                             61
+#define TOK_ATAN2                           62
+#define TOK_POS                             63
+#define TOK_NEG                             64
+#define TOK_POS0                            65
+#define TOK_NEG0                            66
+#define TOK_SIGN                            67
+#define TOK_FLOOR                           68
+#define TOK_CEIL                            69
+#define TOK_ROUND                           70
+#define TOK_HYPOT                           71
+#define TOK_RAND                            72
+#define TOK_VECTOR_ID                       73
+#define TOK_SPH_TENSOR_ID                   74
+#define TOK_SYM_TENSOR_ID                   75
+#define TOK_IDENTITY_TENSOR                 76
+#define TOK_TENSOR_ID                       77
+#define TOK_BOOL_ID                         78
+#define TOK_MAG                             79
+#define TOK_MAGSQR                          80
+#define TOK_VECTOR                          81
+#define TOK_TENSOR                          82
+#define TOK_SYM_TENSOR                      83
+#define TOK_SPH_TENSOR                      84
+#define TOK_CMPT_X                          85
+#define TOK_CMPT_Y                          86
+#define TOK_CMPT_Z                          87
+#define TOK_CMPT_XX                         88
+#define TOK_CMPT_XY                         89
+#define TOK_CMPT_XZ                         90
+#define TOK_CMPT_YX                         91
+#define TOK_CMPT_YY                         92
+#define TOK_CMPT_YZ                         93
+#define TOK_CMPT_ZX                         94
+#define TOK_CMPT_ZY                         95
+#define TOK_CMPT_ZZ                         96
+#define TOK_CMPT_II                         97
+#define TOK_TRANSPOSE                       98
+#define TOK_DIAG                            99
diff --git a/src/OpenFOAM/expressions/fields/fieldExprLemonParser.lyy-m4 b/src/OpenFOAM/expressions/fields/fieldExprLemonParser.lyy-m4
index a7797b50edccc47667cc42368ee55b4b1389a6fc..b29f09dac0c17976a7935b43c7d57de8e1bf4f05 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprLemonParser.lyy-m4
+++ b/src/OpenFOAM/expressions/fields/fieldExprLemonParser.lyy-m4
@@ -98,6 +98,7 @@ TBD
  */
 %include
 {
+#include "exprScanToken.H"
 #include "fieldExprDriver.H"
 #include "fieldExprParser.H"
 #include "fieldExprScanner.H"
@@ -131,11 +132,8 @@ tmp_management()
 %token_prefix TOK_
 
 // Terminals
-%token_type    {Foam::expressions::fieldExpr::scanToken*}
-// Non-terminals
-%type ivalue   { Foam::label }
-%type svalue   { Foam::scalar }
-%type ident    { Foam::word* }
+%token_type         {Foam::expressions::scanToken}
+%token_destructor   { ($$).destroy(); }
 
 // Fields
 declare_field(lfield, Foam::boolField, bool, newField, getField)
@@ -150,6 +148,7 @@ declare_field(tfield, Foam::tensorField, Foam::tensor, newField, getField)
 // Lemon does not generate a destructor for that.
 // So do not use Lemon destructors for anything.
 
+standard_tokens()
 operator_precedence()
 
 %start_symbol evaluate
@@ -160,7 +159,10 @@ operator_precedence()
  * Productions (scalar)
 \*---------------------------------------------------------------------------*/
 
-svalue (lhs) ::= NUMBER (a) .       { lhs = (a)->svalue; }  // From scanToken
+%type svalue { Foam::scalar }
+
+svalue (lhs) ::= NUMBER (tok) .     { lhs = (tok).scalarValue; } // scanToken
+
 svalue (lhs) ::= ZERO .             { lhs = Foam::Zero; }
 svalue (lhs) ::= PI LPAREN RPAREN . { lhs = Foam::constant::mathematical::pi; }
 svalue (lhs) ::= DEG_TO_RAD LPAREN RPAREN . { lhs = Foam::degToRad(); }
@@ -169,6 +171,32 @@ svalue (lhs) ::= ARG LPAREN RPAREN . { lhs = driver->argValue(); }
 svalue (lhs) ::= TIME LPAREN RPAREN . { lhs = driver->timeValue(); }
 svalue (lhs) ::= DELTA_T LPAREN RPAREN . { lhs = driver->deltaT(); }
 
+svalue (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = 0;
+}
+
+
+/*---------------------------------------------------------------------------*\
+ * Productions (vector)
+\*---------------------------------------------------------------------------*/
+
+%type vvalue { Foam::vector* }
+%destructor vvalue { delete($$); $$ = nullptr; }
+
+vvalue (lhs) ::= VECTOR_VALUE (tok) .
+{
+    // Take ownership of pointer from scan token
+    lhs = tok.vectorPtr; tok.vectorPtr = nullptr;
+}
+
+vvalue (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = new Foam::vector(0,0,0);
+}
+
 
 /* * * * * * * * * * * * * * * * * * Fields  * * * * * * * * * * * * * * * * *\
 dnl
@@ -184,7 +212,9 @@ dnl
 /*---------------------------------------------------------------------------*\
  * Productions (scalarField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [sfield])dnl
+define([_new_target_],  [_new_sfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -200,9 +230,9 @@ rules_scalar_operations()
 rules_scalar_functions()
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but works directly for scalarField
 rule_binary_func(_target_, _target_, _target_, HYPOT, Foam::hypot)
@@ -217,20 +247,30 @@ _target_ (lhs) ::= RAND LPAREN RPAREN.
 
 _target_ (lhs) ::= RAND LPAREN NUMBER (seed) RPAREN.
 {
-    lhs = driver->field_rand(std::round((seed)->svalue)).ptr();
+    lhs = driver->field_rand(std::round((seed).scalarValue)).ptr();
+}
+
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
 }
 
 
 /*---------------------------------------------------------------------------*\
  * Productions (vectorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [vfield])dnl
+define([_new_target_],  [_new_vfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a); }
 
+rule_field_from_value(_target_, vvalue)
 rule_get_field(_target_, VECTOR_ID)
 
 rules_standard(_target_, _value_type_, _logic_)
@@ -238,11 +278,22 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+// Other functions
+
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 
 /*---------------------------------------------------------------------------*\
  * Productions (sphericalTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [hfield])dnl
+define([_new_target_],  [_new_hfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -260,7 +311,9 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (symmTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [yfield])dnl
+define([_new_target_],  [_new_yfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -278,7 +331,9 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (tensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [tfield])dnl
+define([_new_target_],  [_new_tfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -300,6 +355,7 @@ rules_tensor_functions()
  * Logic field productions (boolField)
 dnl
 define([_target_],      [lfield])dnl
+define([_new_target_],  [_new_lfield])dnl
 define([_value_type_],  [bool])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -393,13 +449,15 @@ void Foam::expressions::fieldExpr::parser::start(parseDriver& driver_)
 }
 
 
-void Foam::expressions::fieldExpr::parser::parse
-(
-    int tokenId,
-    scanToken* tokenVal
-)
+void Foam::expressions::fieldExpr::parser::parse(int tokenId)
+{
+    Parse(lemon_, tokenId, scanToken::null());
+}
+
+
+void Foam::expressions::fieldExpr::parser::parse(int tokenId, scanToken tok)
 {
-    Parse(lemon_, tokenId, tokenVal);
+    Parse(lemon_, tokenId, tok);
 }
 
 
diff --git a/src/OpenFOAM/expressions/fields/fieldExprParser.H b/src/OpenFOAM/expressions/fields/fieldExprParser.H
index b8f902eb7f9e44d2b58f868ed4bc72aea10c03d4..949768e28d6850ef7fc9d10e1103000112abeef3 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprParser.H
+++ b/src/OpenFOAM/expressions/fields/fieldExprParser.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,6 +34,7 @@ Description
 #ifndef expressions_fieldExprParser_H
 #define expressions_fieldExprParser_H
 
+#include "exprScanToken.H"
 #include "fieldExprFwd.H"
 
 namespace Foam
@@ -97,10 +98,14 @@ public:
         //- Stop parsing, freeing the allocated parser
         void stop();
 
-        //- Push token/value to parser
-        void parse(int tokenId, scanToken* tokenVal);
+        //- Push token type to parser with default token
+        void parse(int tokenId);
+
+        //- Push token type/value to parser
+        void parse(int tokenId, scanToken tok);
 };
 
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace fieldExpr
diff --git a/src/OpenFOAM/expressions/fields/fieldExprScanner.H b/src/OpenFOAM/expressions/fields/fieldExprScanner.H
index 2c7b877ec1b46c6fc547890af1345603be5106ba..4deeb5b5c2c6cb913909cb191bd52f67efc27296 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprScanner.H
+++ b/src/OpenFOAM/expressions/fields/fieldExprScanner.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -38,7 +38,6 @@ Note
 #define expressions_fieldExprScanner_H
 
 #include "fieldExprFwd.H"
-#include "scalar.H"
 
 namespace Foam
 {
@@ -47,21 +46,6 @@ namespace expressions
 namespace fieldExpr
 {
 
-/*---------------------------------------------------------------------------*\
-                          Class scanToken Declaration
-\*---------------------------------------------------------------------------*/
-
-union scanToken
-{
-    Foam::label  ivalue;
-    Foam::scalar svalue;
-    Foam::word*  name;
-
-    //- Default construct, bit-wise zero for union content
-    scanToken() : ivalue(0) {}
-};
-
-
 /*---------------------------------------------------------------------------*\
                          Class scanner Declaration
 \*---------------------------------------------------------------------------*/
@@ -83,16 +67,14 @@ class scanner
         bool dispatch_method
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
         //- Dispatch identifier to parser (if possible) or Fatal
         bool dispatch_ident
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
 
diff --git a/src/OpenFOAM/expressions/fields/fieldExprScanner.cc b/src/OpenFOAM/expressions/fields/fieldExprScanner.cc
index fb34d6ec33bf70d52734e183c3a770a6d3525ba9..99503b8e010ab3d84e32db856d875106a7b9e635 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprScanner.cc
+++ b/src/OpenFOAM/expressions/fields/fieldExprScanner.cc
@@ -30,6 +30,7 @@ Description
 
 \*---------------------------------------------------------------------------*/
 
+#include "exprScanToken.H"
 #include "fieldExprScanner.H"
 #include "fieldExprDriver.H"
 #include "fieldExprLemonParser.h"
@@ -44,7 +45,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -57,8 +57,9 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
+// No known look-back types
 #undef HAS_LOOKBEHIND_TOKENS
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
@@ -123,22 +124,27 @@ static int driverTokenType
     const word& ident
 )
 {
+    #ifdef HAS_LOOKBEHIND_TOKENS
+    // Get stashed "look-behind" to decide what type of identifier we expect
+    #endif
+
     // Field variables
     #ifdef TOK_SCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isLocalVariable<Type>(ident, false))                      \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isLocalVariable<Type>(ident, false))            \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SCALAR_ID, scalar);
-        checkFieldToken(TOK_VECTOR_ID, vector);
-        checkFieldToken(TOK_SYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_TENSOR_ID, tensor);
-        // Not tested: checkFieldToken(TOK_BOOL_ID, bool);
+        doLocalCode(TOK_SCALAR_ID, scalar);
+        doLocalCode(TOK_VECTOR_ID, vector);
+        doLocalCode(TOK_SYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_TENSOR_ID, tensor);
+        // Not tested: doLocalCode(TOK_BOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
@@ -158,20 +164,28 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
 
-#line 167 "fieldExprScanner.cc"
-static const int fieldExpr_start = 11;
-static const int fieldExpr_first_final = 11;
+#line 181 "fieldExprScanner.cc"
+static const int fieldExpr_start = 13;
+static const int fieldExpr_first_final = 13;
 static const int fieldExpr_error = 0;
 
-static const int fieldExpr_en_main = 11;
+static const int fieldExpr_en_main = 13;
 
 
-#line 305 "fieldExprScanner.rl"
+#line 326 "fieldExprScanner.rl"
 
 
 
@@ -191,8 +205,7 @@ Foam::expressions::fieldExpr::scanner::~scanner()
 bool Foam::expressions::fieldExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -209,8 +222,8 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -223,10 +236,11 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_method
 bool Foam::expressions::fieldExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -251,12 +265,12 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -266,17 +280,28 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -284,8 +309,9 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -317,12 +343,13 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -385,9 +412,6 @@ bool Foam::expressions::fieldExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -403,7 +427,7 @@ bool Foam::expressions::fieldExpr::scanner::process
 
     // Initialize FSM variables
     
-#line 407 "fieldExprScanner.cc"
+#line 431 "fieldExprScanner.cc"
 	{
 	cs = fieldExpr_start;
 	ts = 0;
@@ -411,44 +435,49 @@ bool Foam::expressions::fieldExpr::scanner::process
 	act = 0;
 	}
 
-#line 535 "fieldExprScanner.rl"
+#line 566 "fieldExprScanner.rl"
    /* ^^^ FSM initialization here ^^^ */;
 
     
-#line 419 "fieldExprScanner.cc"
+#line 443 "fieldExprScanner.cc"
 	{
 	if ( p == pe )
 		goto _test_eof;
 	switch ( cs )
 	{
 tr2:
-#line 189 "fieldExprScanner.rl"
+#line 206 "fieldExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr4:
-#line 189 "fieldExprScanner.rl"
+#line 206 "fieldExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr5:
-#line 167 "fieldExprScanner.rl"
+#line 181 "fieldExprScanner.rl"
 	{{p = ((te))-1;}{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -460,103 +489,122 @@ tr5:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr8:
-#line 232 "fieldExprScanner.rl"
+#line 250 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(EQUAL); }}
-	goto st11;
+	goto st13;
 tr9:
-#line 284 "fieldExprScanner.rl"
+#line 302 "fieldExprScanner.rl"
 	{{p = ((te))-1;}{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
+	goto st13;
 tr11:
-#line 292 "fieldExprScanner.rl"
+#line 313 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(IDENTITY_TENSOR); }}
-	goto st11;
+	goto st13;
 tr12:
-#line 235 "fieldExprScanner.rl"
-	{te = p+1;{ EMIT_TOKEN(LOR); }}
-	goto st11;
+#line 301 "fieldExprScanner.rl"
+	{{p = ((te))-1;}{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+tr14:
+#line 310 "fieldExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(1,0,0); }}
+	goto st13;
+tr15:
+#line 311 "fieldExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,1,0); }}
+	goto st13;
 tr16:
-#line 217 "fieldExprScanner.rl"
+#line 312 "fieldExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,0,1); }}
+	goto st13;
+tr17:
+#line 253 "fieldExprScanner.rl"
+	{te = p+1;{ EMIT_TOKEN(LOR); }}
+	goto st13;
+tr21:
+#line 235 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PERCENT); }}
-	goto st11;
-tr19:
-#line 218 "fieldExprScanner.rl"
+	goto st13;
+tr24:
+#line 236 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LPAREN); }}
-	goto st11;
-tr20:
-#line 219 "fieldExprScanner.rl"
+	goto st13;
+tr25:
+#line 237 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(RPAREN); }}
-	goto st11;
-tr21:
-#line 220 "fieldExprScanner.rl"
+	goto st13;
+tr26:
+#line 238 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(TIMES); }}
-	goto st11;
-tr22:
-#line 221 "fieldExprScanner.rl"
+	goto st13;
+tr27:
+#line 239 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PLUS); }}
-	goto st11;
-tr23:
-#line 223 "fieldExprScanner.rl"
+	goto st13;
+tr28:
+#line 241 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COMMA); }}
-	goto st11;
-tr24:
-#line 222 "fieldExprScanner.rl"
+	goto st13;
+tr29:
+#line 240 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(MINUS); }}
-	goto st11;
-tr26:
-#line 225 "fieldExprScanner.rl"
+	goto st13;
+tr31:
+#line 243 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(DIVIDE); }}
-	goto st11;
-tr28:
-#line 227 "fieldExprScanner.rl"
+	goto st13;
+tr33:
+#line 245 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COLON); }}
-	goto st11;
-tr32:
-#line 226 "fieldExprScanner.rl"
+	goto st13;
+tr37:
+#line 244 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(QUESTION); }}
-	goto st11;
-tr35:
-#line 238 "fieldExprScanner.rl"
+	goto st13;
+tr40:
+#line 256 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(BIT_XOR); }}
-	goto st11;
-tr51:
-#line 211 "fieldExprScanner.rl"
+	goto st13;
+tr56:
+#line 229 "fieldExprScanner.rl"
 	{te = p;p--;}
-	goto st11;
-tr52:
-#line 216 "fieldExprScanner.rl"
-	{te = p;p--;{ EMIT_TOKEN(NOT); }}
-	goto st11;
-tr53:
-#line 233 "fieldExprScanner.rl"
+	goto st13;
+tr57:
+#line 234 "fieldExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(LNOT); }}
+	goto st13;
+tr58:
+#line 251 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(NOT_EQUAL); }}
-	goto st11;
-tr54:
-#line 236 "fieldExprScanner.rl"
+	goto st13;
+tr59:
+#line 254 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(BIT_AND); }}
-	goto st11;
-tr55:
-#line 234 "fieldExprScanner.rl"
+	goto st13;
+tr60:
+#line 252 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LAND); }}
-	goto st11;
-tr56:
-#line 224 "fieldExprScanner.rl"
+	goto st13;
+tr61:
+#line 242 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(DOT); }}
-	goto st11;
-tr59:
-#line 167 "fieldExprScanner.rl"
+	goto st13;
+tr64:
+#line 181 "fieldExprScanner.rl"
 	{te = p;p--;{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -568,41 +616,42 @@ tr59:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr61:
-#line 195 "fieldExprScanner.rl"
+	goto st13;
+tr66:
+#line 213 "fieldExprScanner.rl"
 	{te = p;p--;{
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr62:
-#line 228 "fieldExprScanner.rl"
+	goto st13;
+tr67:
+#line 246 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LESS); }}
-	goto st11;
-tr63:
-#line 229 "fieldExprScanner.rl"
+	goto st13;
+tr68:
+#line 247 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LESS_EQ); }}
-	goto st11;
-tr64:
-#line 230 "fieldExprScanner.rl"
+	goto st13;
+tr69:
+#line 248 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(GREATER); }}
-	goto st11;
-tr65:
-#line 231 "fieldExprScanner.rl"
+	goto st13;
+tr70:
+#line 249 "fieldExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(GREATER_EQ); }}
-	goto st11;
-tr66:
-#line 189 "fieldExprScanner.rl"
+	goto st13;
+tr71:
+#line 206 "fieldExprScanner.rl"
 	{te = p;p--;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr68:
+	goto st13;
+tr73:
 #line 1 "NONE"
 	{	switch( act ) {
 	case 26:
@@ -677,9 +726,6 @@ tr68:
 	case 58:
 	{{p = ((te))-1;} EMIT_TOKEN(BOOL); }
 	break;
-	case 59:
-	{{p = ((te))-1;} EMIT_TOKEN(VECTOR); }
-	break;
 	case 61:
 	{{p = ((te))-1;} EMIT_TOKEN(SYM_TENSOR); }
 	break;
@@ -687,146 +733,157 @@ tr68:
 	{{p = ((te))-1;} EMIT_TOKEN(SPH_TENSOR); }
 	break;
 	case 63:
-	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
+	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
 	break;
 	case 64:
-	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
+	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
 	break;
 	case 65:
-	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
+	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
 	break;
-	case 67:
+	case 70:
 	{{p = ((te))-1;} EMIT_TOKEN(ARG); }
 	break;
-	case 68:
+	case 71:
+	{{p = ((te))-1;} EMIT_TOKEN(TIME); }
+	break;
+	case 72:
+	{{p = ((te))-1;} EMIT_TOKEN(DELTA_T); }
+	break;
+	case 73:
 	{{p = ((te))-1;}
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 	break;
 	}
 	}
-	goto st11;
-tr84:
-#line 260 "fieldExprScanner.rl"
+	goto st13;
+tr89:
+#line 278 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(ATAN); }}
-	goto st11;
-tr99:
-#line 256 "fieldExprScanner.rl"
+	goto st13;
+tr104:
+#line 274 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(COS); }}
-	goto st11;
-tr116:
-#line 249 "fieldExprScanner.rl"
+	goto st13;
+tr125:
+#line 267 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LOG); }}
-	goto st11;
-tr123:
-#line 265 "fieldExprScanner.rl"
+	goto st13;
+tr132:
+#line 283 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(MAG); }}
-	goto st11;
-tr130:
-#line 269 "fieldExprScanner.rl"
+	goto st13;
+tr139:
+#line 287 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(NEG); }}
-	goto st11;
-tr136:
-#line 268 "fieldExprScanner.rl"
+	goto st13;
+tr145:
+#line 286 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(POS); }}
-	goto st11;
-tr155:
-#line 255 "fieldExprScanner.rl"
+	goto st13;
+tr164:
+#line 273 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SIN); }}
-	goto st11;
-tr171:
-#line 252 "fieldExprScanner.rl"
+	goto st13;
+tr180:
+#line 270 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SQR); }}
-	goto st11;
-tr186:
-#line 257 "fieldExprScanner.rl"
+	goto st13;
+tr196:
+#line 275 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TAN); }}
-	goto st11;
-tr192:
-#line 284 "fieldExprScanner.rl"
+	goto st13;
+tr202:
+#line 302 "fieldExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
-st11:
+	goto st13;
+tr213:
+#line 301 "fieldExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+st13:
 #line 1 "NONE"
 	{ts = 0;}
 	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
+		goto _test_eof13;
+case 13:
 #line 1 "NONE"
 	{ts = p;}
-#line 760 "fieldExprScanner.cc"
+#line 817 "fieldExprScanner.cc"
 	switch( (*p) ) {
-		case 32: goto st12;
-		case 33: goto st13;
+		case 32: goto st14;
+		case 33: goto st15;
 		case 34: goto st1;
-		case 37: goto tr16;
-		case 38: goto st14;
+		case 37: goto tr21;
+		case 38: goto st16;
 		case 39: goto st3;
-		case 40: goto tr19;
-		case 41: goto tr20;
-		case 42: goto tr21;
-		case 43: goto tr22;
-		case 44: goto tr23;
-		case 45: goto tr24;
-		case 46: goto st15;
-		case 47: goto tr26;
-		case 58: goto tr28;
-		case 60: goto st20;
+		case 40: goto tr24;
+		case 41: goto tr25;
+		case 42: goto tr26;
+		case 43: goto tr27;
+		case 44: goto tr28;
+		case 45: goto tr29;
+		case 46: goto st17;
+		case 47: goto tr31;
+		case 58: goto tr33;
+		case 60: goto st22;
 		case 61: goto st7;
-		case 62: goto st21;
-		case 63: goto tr32;
-		case 90: goto st24;
-		case 94: goto tr35;
-		case 95: goto st22;
-		case 97: goto st27;
-		case 98: goto st41;
-		case 99: goto st44;
-		case 100: goto st49;
-		case 101: goto st56;
-		case 102: goto st58;
-		case 108: goto st62;
-		case 109: goto st66;
-		case 110: goto st72;
-		case 112: goto st75;
-		case 114: goto st78;
-		case 115: goto st86;
-		case 116: goto st114;
-		case 118: goto st124;
-		case 124: goto st10;
+		case 62: goto st23;
+		case 63: goto tr37;
+		case 90: goto st26;
+		case 94: goto tr40;
+		case 95: goto st24;
+		case 97: goto st29;
+		case 98: goto st43;
+		case 99: goto st46;
+		case 100: goto st51;
+		case 101: goto st61;
+		case 102: goto st63;
+		case 108: goto st67;
+		case 109: goto st71;
+		case 110: goto st77;
+		case 112: goto st80;
+		case 114: goto st83;
+		case 115: goto st91;
+		case 116: goto st119;
+		case 118: goto st131;
+		case 124: goto st12;
 	}
 	if ( (*p) < 48 ) {
 		if ( 9 <= (*p) && (*p) <= 13 )
-			goto st12;
+			goto st14;
 	} else if ( (*p) > 57 ) {
 		if ( (*p) > 89 ) {
 			if ( 103 <= (*p) && (*p) <= 122 )
-				goto st22;
+				goto st24;
 		} else if ( (*p) >= 65 )
-			goto st22;
+			goto st24;
 	} else
-		goto tr27;
+		goto tr32;
 	goto st0;
 st0:
 cs = 0;
 	goto _out;
-st12:
+st14:
 	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
+		goto _test_eof14;
+case 14:
 	if ( (*p) == 32 )
-		goto st12;
+		goto st14;
 	if ( 9 <= (*p) && (*p) <= 13 )
-		goto st12;
-	goto tr51;
-st13:
+		goto st14;
+	goto tr56;
+st15:
 	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
+		goto _test_eof15;
+case 15:
 	if ( (*p) == 61 )
-		goto tr53;
-	goto tr52;
+		goto tr58;
+	goto tr57;
 st1:
 	if ( ++p == pe )
 		goto _test_eof1;
@@ -841,13 +898,13 @@ case 2:
 	if ( (*p) == 34 )
 		goto tr2;
 	goto st2;
-st14:
+st16:
 	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
+		goto _test_eof16;
+case 16:
 	if ( (*p) == 38 )
-		goto tr55;
-	goto tr54;
+		goto tr60;
+	goto tr59;
 st3:
 	if ( ++p == pe )
 		goto _test_eof3;
@@ -862,35 +919,35 @@ case 4:
 	if ( (*p) == 39 )
 		goto tr4;
 	goto st4;
-st15:
+st17:
 	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
+		goto _test_eof17;
+case 17:
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr57;
+			goto tr62;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else
-		goto st18;
-	goto tr56;
-tr57:
+		goto st20;
+	goto tr61;
+tr62:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st16;
-st16:
+	goto st18;
+st18:
 	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-#line 887 "fieldExprScanner.cc"
+		goto _test_eof18;
+case 18:
+#line 944 "fieldExprScanner.cc"
 	switch( (*p) ) {
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr57;
-	goto tr59;
+		goto tr62;
+	goto tr64;
 st5:
 	if ( ++p == pe )
 		goto _test_eof5;
@@ -900,56 +957,56 @@ case 5:
 		case 45: goto st6;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
 st6:
 	if ( ++p == pe )
 		goto _test_eof6;
 case 6:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
-st17:
+st19:
 	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
+		goto _test_eof19;
+case 19:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
-	goto tr59;
-st18:
+		goto st19;
+	goto tr64;
+st20:
 	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
+		goto _test_eof20;
+case 20:
 	if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else if ( (*p) >= 65 )
-		goto st18;
-	goto tr61;
-tr27:
+		goto st20;
+	goto tr66;
+tr32:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st19;
-st19:
+	goto st21;
+st21:
 	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-#line 938 "fieldExprScanner.cc"
+		goto _test_eof21;
+case 21:
+#line 995 "fieldExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr57;
+		case 46: goto tr62;
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr27;
-	goto tr59;
-st20:
+		goto tr32;
+	goto tr64;
+st22:
 	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
+		goto _test_eof22;
+case 22:
 	if ( (*p) == 61 )
-		goto tr63;
-	goto tr62;
+		goto tr68;
+	goto tr67;
 st7:
 	if ( ++p == pe )
 		goto _test_eof7;
@@ -957,2193 +1014,2329 @@ case 7:
 	if ( (*p) == 61 )
 		goto tr8;
 	goto st0;
-st21:
+st23:
 	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
+		goto _test_eof23;
+case 23:
 	if ( (*p) == 61 )
-		goto tr65;
-	goto tr64;
-st22:
+		goto tr70;
+	goto tr69;
+st24:
 	if ( ++p == pe )
-		goto _test_eof22;
-case 22:
+		goto _test_eof24;
+case 24:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
-tr67:
+		goto tr72;
+	goto tr71;
+tr72:
 #line 1 "NONE"
 	{te = p+1;}
-#line 189 "fieldExprScanner.rl"
-	{act = 68;}
-	goto st23;
-tr71:
+#line 206 "fieldExprScanner.rl"
+	{act = 73;}
+	goto st25;
+tr76:
 #line 1 "NONE"
 	{te = p+1;}
-#line 289 "fieldExprScanner.rl"
-	{act = 63;}
-	goto st23;
-tr78:
+#line 309 "fieldExprScanner.rl"
+	{act = 65;}
+	goto st25;
+tr83:
 #line 1 "NONE"
 	{te = p+1;}
-#line 259 "fieldExprScanner.rl"
+#line 277 "fieldExprScanner.rl"
 	{act = 40;}
-	goto st23;
-tr79:
+	goto st25;
+tr84:
 #line 1 "NONE"
 	{te = p+1;}
-#line 293 "fieldExprScanner.rl"
-	{act = 67;}
-	goto st23;
-tr81:
+#line 314 "fieldExprScanner.rl"
+	{act = 70;}
+	goto st25;
+tr86:
 #line 1 "NONE"
 	{te = p+1;}
-#line 258 "fieldExprScanner.rl"
+#line 276 "fieldExprScanner.rl"
 	{act = 39;}
-	goto st23;
-tr85:
+	goto st25;
+tr90:
 #line 1 "NONE"
 	{te = p+1;}
-#line 261 "fieldExprScanner.rl"
+#line 279 "fieldExprScanner.rl"
 	{act = 42;}
-	goto st23;
-tr90:
+	goto st25;
+tr95:
 #line 1 "NONE"
 	{te = p+1;}
-#line 277 "fieldExprScanner.rl"
+#line 295 "fieldExprScanner.rl"
 	{act = 55;}
-	goto st23;
-tr93:
+	goto st25;
+tr98:
 #line 1 "NONE"
 	{te = p+1;}
-#line 282 "fieldExprScanner.rl"
+#line 300 "fieldExprScanner.rl"
 	{act = 58;}
-	goto st23;
-tr97:
+	goto st25;
+tr102:
 #line 1 "NONE"
 	{te = p+1;}
-#line 254 "fieldExprScanner.rl"
+#line 272 "fieldExprScanner.rl"
 	{act = 35;}
-	goto st23;
-tr100:
+	goto st25;
+tr105:
 #line 1 "NONE"
 	{te = p+1;}
-#line 263 "fieldExprScanner.rl"
+#line 281 "fieldExprScanner.rl"
 	{act = 44;}
-	goto st23;
-tr107:
+	goto st25;
+tr113:
 #line 1 "NONE"
 	{te = p+1;}
-#line 246 "fieldExprScanner.rl"
+#line 264 "fieldExprScanner.rl"
 	{act = 27;}
-	goto st23;
-tr109:
+	goto st25;
+tr116:
 #line 1 "NONE"
 	{te = p+1;}
-#line 248 "fieldExprScanner.rl"
+#line 316 "fieldExprScanner.rl"
+	{act = 72;}
+	goto st25;
+tr118:
+#line 1 "NONE"
+	{te = p+1;}
+#line 266 "fieldExprScanner.rl"
 	{act = 29;}
-	goto st23;
-tr113:
+	goto st25;
+tr122:
 #line 1 "NONE"
 	{te = p+1;}
-#line 291 "fieldExprScanner.rl"
-	{act = 65;}
-	goto st23;
-tr118:
+#line 308 "fieldExprScanner.rl"
+	{act = 64;}
+	goto st25;
+tr127:
 #line 1 "NONE"
 	{te = p+1;}
-#line 250 "fieldExprScanner.rl"
+#line 268 "fieldExprScanner.rl"
 	{act = 31;}
-	goto st23;
-tr122:
+	goto st25;
+tr131:
 #line 1 "NONE"
 	{te = p+1;}
-#line 276 "fieldExprScanner.rl"
+#line 294 "fieldExprScanner.rl"
 	{act = 54;}
-	goto st23;
-tr126:
+	goto st25;
+tr135:
 #line 1 "NONE"
 	{te = p+1;}
-#line 266 "fieldExprScanner.rl"
+#line 284 "fieldExprScanner.rl"
 	{act = 47;}
-	goto st23;
-tr127:
+	goto st25;
+tr136:
 #line 1 "NONE"
 	{te = p+1;}
-#line 275 "fieldExprScanner.rl"
+#line 293 "fieldExprScanner.rl"
 	{act = 53;}
-	goto st23;
-tr131:
+	goto st25;
+tr140:
 #line 1 "NONE"
 	{te = p+1;}
-#line 271 "fieldExprScanner.rl"
+#line 289 "fieldExprScanner.rl"
 	{act = 51;}
-	goto st23;
-tr132:
+	goto st25;
+tr141:
 #line 1 "NONE"
 	{te = p+1;}
-#line 245 "fieldExprScanner.rl"
+#line 263 "fieldExprScanner.rl"
 	{act = 26;}
-	goto st23;
-tr135:
+	goto st25;
+tr144:
 #line 1 "NONE"
 	{te = p+1;}
-#line 251 "fieldExprScanner.rl"
+#line 269 "fieldExprScanner.rl"
 	{act = 32;}
-	goto st23;
-tr137:
+	goto st25;
+tr146:
 #line 1 "NONE"
 	{te = p+1;}
-#line 270 "fieldExprScanner.rl"
+#line 288 "fieldExprScanner.rl"
 	{act = 50;}
-	goto st23;
-tr145:
+	goto st25;
+tr154:
 #line 1 "NONE"
 	{te = p+1;}
-#line 247 "fieldExprScanner.rl"
+#line 265 "fieldExprScanner.rl"
 	{act = 28;}
-	goto st23;
-tr146:
+	goto st25;
+tr155:
 #line 1 "NONE"
 	{te = p+1;}
-#line 279 "fieldExprScanner.rl"
+#line 297 "fieldExprScanner.rl"
 	{act = 57;}
-	goto st23;
-tr154:
+	goto st25;
+tr163:
 #line 1 "NONE"
 	{te = p+1;}
-#line 272 "fieldExprScanner.rl"
+#line 290 "fieldExprScanner.rl"
 	{act = 52;}
-	goto st23;
-tr156:
+	goto st25;
+tr165:
 #line 1 "NONE"
 	{te = p+1;}
-#line 262 "fieldExprScanner.rl"
+#line 280 "fieldExprScanner.rl"
 	{act = 43;}
-	goto st23;
-tr169:
+	goto st25;
+tr178:
 #line 1 "NONE"
 	{te = p+1;}
-#line 286 "fieldExprScanner.rl"
+#line 304 "fieldExprScanner.rl"
 	{act = 62;}
-	goto st23;
-tr172:
+	goto st25;
+tr181:
 #line 1 "NONE"
 	{te = p+1;}
-#line 253 "fieldExprScanner.rl"
+#line 271 "fieldExprScanner.rl"
 	{act = 34;}
-	goto st23;
-tr173:
+	goto st25;
+tr182:
 #line 1 "NONE"
 	{te = p+1;}
-#line 278 "fieldExprScanner.rl"
+#line 296 "fieldExprScanner.rl"
 	{act = 56;}
-	goto st23;
-tr181:
+	goto st25;
+tr190:
 #line 1 "NONE"
 	{te = p+1;}
-#line 285 "fieldExprScanner.rl"
+#line 303 "fieldExprScanner.rl"
 	{act = 61;}
-	goto st23;
-tr187:
+	goto st25;
+tr197:
 #line 1 "NONE"
 	{te = p+1;}
-#line 264 "fieldExprScanner.rl"
+#line 282 "fieldExprScanner.rl"
 	{act = 45;}
-	goto st23;
-tr195:
+	goto st25;
+tr205:
 #line 1 "NONE"
 	{te = p+1;}
-#line 290 "fieldExprScanner.rl"
-	{act = 64;}
-	goto st23;
-tr200:
+#line 315 "fieldExprScanner.rl"
+	{act = 71;}
+	goto st25;
+tr207:
 #line 1 "NONE"
 	{te = p+1;}
-#line 283 "fieldExprScanner.rl"
-	{act = 59;}
-	goto st23;
-st23:
-	if ( ++p == pe )
-		goto _test_eof23;
-case 23:
-#line 1181 "fieldExprScanner.cc"
-	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
-	} else
-		goto tr67;
-	goto tr68;
-st24:
-	if ( ++p == pe )
-		goto _test_eof24;
-case 24:
-	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st25;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
-	} else
-		goto tr67;
-	goto tr66;
+#line 307 "fieldExprScanner.rl"
+	{act = 63;}
+	goto st25;
 st25:
 	if ( ++p == pe )
 		goto _test_eof25;
 case 25:
+#line 1244 "fieldExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto st26;
+		case 46: goto tr72;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr73;
 st26:
 	if ( ++p == pe )
 		goto _test_eof26;
 case 26:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto tr71;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st27;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st27:
 	if ( ++p == pe )
 		goto _test_eof27;
 case 27:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 99: goto st28;
-		case 114: goto st30;
-		case 115: goto st31;
-		case 116: goto st33;
-		case 118: goto st36;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto st28;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st28:
 	if ( ++p == pe )
 		goto _test_eof28;
 case 28:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st29;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto tr76;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st29:
 	if ( ++p == pe )
 		goto _test_eof29;
 case 29:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto tr78;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 99: goto st30;
+		case 114: goto st32;
+		case 115: goto st33;
+		case 116: goto st35;
+		case 118: goto st38;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st30:
 	if ( ++p == pe )
 		goto _test_eof30;
 case 30:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto tr79;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st31;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st31:
 	if ( ++p == pe )
 		goto _test_eof31;
 case 31:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 105: goto st32;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto tr83;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st32:
 	if ( ++p == pe )
 		goto _test_eof32;
 case 32:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto tr81;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto tr84;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st33:
 	if ( ++p == pe )
 		goto _test_eof33;
 case 33:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st34;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 105: goto st34;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st34:
 	if ( ++p == pe )
 		goto _test_eof34;
 case 34:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto st35;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto tr86;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st35:
 	if ( ++p == pe )
 		goto _test_eof35;
 case 35:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 50: goto tr85;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st36;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr84;
+		goto tr72;
+	goto tr71;
 st36:
 	if ( ++p == pe )
 		goto _test_eof36;
 case 36:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st37;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto st37;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st37:
 	if ( ++p == pe )
 		goto _test_eof37;
 case 37:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto st38;
+		case 46: goto tr72;
+		case 50: goto tr90;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr89;
 st38:
 	if ( ++p == pe )
 		goto _test_eof38;
 case 38:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st39;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st39;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st39:
 	if ( ++p == pe )
 		goto _test_eof39;
 case 39:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st40;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto st40;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st40:
 	if ( ++p == pe )
 		goto _test_eof40;
 case 40:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto tr90;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st41;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st41:
 	if ( ++p == pe )
 		goto _test_eof41;
 case 41:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st42;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st42;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st42:
 	if ( ++p == pe )
 		goto _test_eof42;
 case 42:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st43;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto tr95;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st43:
 	if ( ++p == pe )
 		goto _test_eof43;
 case 43:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 108: goto tr93;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st44;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st44:
 	if ( ++p == pe )
 		goto _test_eof44;
 case 44:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 98: goto st45;
-		case 111: goto st47;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st45;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st45:
 	if ( ++p == pe )
 		goto _test_eof45;
 case 45:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto st46;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 108: goto tr98;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st46:
 	if ( ++p == pe )
 		goto _test_eof46;
 case 46:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 116: goto tr97;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 98: goto st47;
+		case 111: goto st49;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st47:
 	if ( ++p == pe )
 		goto _test_eof47;
 case 47:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st48;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto st48;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st48:
 	if ( ++p == pe )
 		goto _test_eof48;
 case 48:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 104: goto tr100;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 116: goto tr102;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr99;
+		goto tr72;
+	goto tr71;
 st49:
 	if ( ++p == pe )
 		goto _test_eof49;
 case 49:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st50;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st50;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st50:
 	if ( ++p == pe )
 		goto _test_eof50;
 case 50:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st51;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 104: goto tr105;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr104;
 st51:
 	if ( ++p == pe )
 		goto _test_eof51;
 case 51:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 84: goto st52;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st52;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st52:
 	if ( ++p == pe )
 		goto _test_eof52;
 case 52:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st53;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st53;
+		case 108: goto st58;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st53:
 	if ( ++p == pe )
 		goto _test_eof53;
 case 53:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 82: goto st54;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 84: goto st54;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st54:
 	if ( ++p == pe )
 		goto _test_eof54;
 case 54:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st55;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st55;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st55:
 	if ( ++p == pe )
 		goto _test_eof55;
 case 55:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 100: goto tr107;
+		case 46: goto tr72;
+		case 82: goto st56;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st56:
 	if ( ++p == pe )
 		goto _test_eof56;
 case 56:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 120: goto st57;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st57;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st57:
 	if ( ++p == pe )
 		goto _test_eof57;
 case 57:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 112: goto tr109;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 100: goto tr113;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st58:
 	if ( ++p == pe )
 		goto _test_eof58;
 case 58:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st59;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 116: goto st59;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st59:
 	if ( ++p == pe )
 		goto _test_eof59;
 case 59:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 108: goto st60;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st60;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st60:
 	if ( ++p == pe )
 		goto _test_eof60;
 case 60:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st61;
+		case 46: goto tr72;
+		case 84: goto tr116;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st61:
 	if ( ++p == pe )
 		goto _test_eof61;
 case 61:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto tr113;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 120: goto st62;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st62:
 	if ( ++p == pe )
 		goto _test_eof62;
 case 62:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st63;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 112: goto tr118;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st63:
 	if ( ++p == pe )
 		goto _test_eof63;
 case 63:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st64;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st64;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st64:
 	if ( ++p == pe )
 		goto _test_eof64;
 case 64:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 49: goto st65;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 108: goto st65;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr116;
+		goto tr72;
+	goto tr71;
 st65:
 	if ( ++p == pe )
 		goto _test_eof65;
 case 65:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 48: goto tr118;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st66;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st66:
 	if ( ++p == pe )
 		goto _test_eof66;
 case 66:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st67;
-		case 105: goto st71;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto tr122;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st67:
 	if ( ++p == pe )
 		goto _test_eof67;
 case 67:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st68;
-		case 120: goto tr122;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st68;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st68:
 	if ( ++p == pe )
 		goto _test_eof68;
 case 68:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 83: goto st69;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st69;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr123;
+		goto tr72;
+	goto tr71;
 st69:
 	if ( ++p == pe )
 		goto _test_eof69;
 case 69:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 113: goto st70;
+		case 46: goto tr72;
+		case 49: goto st70;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr125;
 st70:
 	if ( ++p == pe )
 		goto _test_eof70;
 case 70:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto tr126;
+		case 46: goto tr72;
+		case 48: goto tr127;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st71:
 	if ( ++p == pe )
 		goto _test_eof71;
 case 71:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto tr127;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st72;
+		case 105: goto st76;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st72:
 	if ( ++p == pe )
 		goto _test_eof72;
 case 72:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st73;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st73;
+		case 120: goto tr131;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st73:
 	if ( ++p == pe )
 		goto _test_eof73;
 case 73:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st74;
+		case 46: goto tr72;
+		case 83: goto st74;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr132;
 st74:
 	if ( ++p == pe )
 		goto _test_eof74;
 case 74:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 48: goto tr131;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 113: goto st75;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr130;
+		goto tr72;
+	goto tr71;
 st75:
 	if ( ++p == pe )
 		goto _test_eof75;
 case 75:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 105: goto tr132;
-		case 111: goto st76;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto tr135;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st76:
 	if ( ++p == pe )
 		goto _test_eof76;
 case 76:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st77;
-		case 119: goto tr135;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto tr136;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st77:
 	if ( ++p == pe )
 		goto _test_eof77;
 case 77:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 48: goto tr137;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st78;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr136;
+		goto tr72;
+	goto tr71;
 st78:
 	if ( ++p == pe )
 		goto _test_eof78;
 case 78:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st79;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st79;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st79:
 	if ( ++p == pe )
 		goto _test_eof79;
 case 79:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 100: goto st80;
-		case 110: goto st85;
+		case 46: goto tr72;
+		case 48: goto tr140;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr139;
 st80:
 	if ( ++p == pe )
 		goto _test_eof80;
 case 80:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 84: goto st81;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 105: goto tr141;
+		case 111: goto st81;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st81:
 	if ( ++p == pe )
 		goto _test_eof81;
 case 81:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st82;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st82;
+		case 119: goto tr144;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st82:
 	if ( ++p == pe )
 		goto _test_eof82;
 case 82:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 68: goto st83;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 48: goto tr146;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr145;
 st83:
 	if ( ++p == pe )
 		goto _test_eof83;
 case 83:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st84;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st84;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st84:
 	if ( ++p == pe )
 		goto _test_eof84;
 case 84:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto tr145;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 100: goto st85;
+		case 110: goto st90;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st85:
 	if ( ++p == pe )
 		goto _test_eof85;
 case 85:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 100: goto tr146;
+		case 46: goto tr72;
+		case 84: goto st86;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st86:
 	if ( ++p == pe )
 		goto _test_eof86;
 case 86:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 105: goto st87;
-		case 112: goto st90;
-		case 113: goto st103;
-		case 117: goto st105;
-		case 121: goto st106;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st87;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st87:
 	if ( ++p == pe )
 		goto _test_eof87;
 case 87:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 103: goto st88;
-		case 110: goto st89;
+		case 46: goto tr72;
+		case 68: goto st88;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st88:
 	if ( ++p == pe )
 		goto _test_eof88;
 case 88:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto tr154;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st89;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st89:
 	if ( ++p == pe )
 		goto _test_eof89;
 case 89:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 104: goto tr156;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto tr154;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr155;
+		goto tr72;
+	goto tr71;
 st90:
 	if ( ++p == pe )
 		goto _test_eof90;
 case 90:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 104: goto st91;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 100: goto tr155;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st91:
 	if ( ++p == pe )
 		goto _test_eof91;
 case 91:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st92;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 105: goto st92;
+		case 112: goto st95;
+		case 113: goto st108;
+		case 117: goto st110;
+		case 121: goto st111;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st92:
 	if ( ++p == pe )
 		goto _test_eof92;
 case 92:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto st93;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 103: goto st93;
+		case 110: goto st94;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st93:
 	if ( ++p == pe )
 		goto _test_eof93;
 case 93:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 105: goto st94;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto tr163;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st94:
 	if ( ++p == pe )
 		goto _test_eof94;
 case 94:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 99: goto st95;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 104: goto tr165;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr164;
 st95:
 	if ( ++p == pe )
 		goto _test_eof95;
 case 95:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st96;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 104: goto st96;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st96:
 	if ( ++p == pe )
 		goto _test_eof96;
 case 96:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 108: goto st97;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st97;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st97:
 	if ( ++p == pe )
 		goto _test_eof97;
 case 97:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 84: goto st98;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto st98;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st98:
 	if ( ++p == pe )
 		goto _test_eof98;
 case 98:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st99;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 105: goto st99;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st99:
 	if ( ++p == pe )
 		goto _test_eof99;
 case 99:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto st100;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 99: goto st100;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st100:
 	if ( ++p == pe )
 		goto _test_eof100;
 case 100:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st101;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st101;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st101:
 	if ( ++p == pe )
 		goto _test_eof101;
 case 101:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st102;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 108: goto st102;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st102:
 	if ( ++p == pe )
 		goto _test_eof102;
 case 102:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto tr169;
+		case 46: goto tr72;
+		case 84: goto st103;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st103:
 	if ( ++p == pe )
 		goto _test_eof103;
 case 103:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto st104;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st104;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st104:
 	if ( ++p == pe )
 		goto _test_eof104;
 case 104:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 116: goto tr172;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto st105;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr171;
+		goto tr72;
+	goto tr71;
 st105:
 	if ( ++p == pe )
 		goto _test_eof105;
 case 105:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 109: goto tr173;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st106;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st106:
 	if ( ++p == pe )
 		goto _test_eof106;
 case 106:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 109: goto st107;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st107;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st107:
 	if ( ++p == pe )
 		goto _test_eof107;
 case 107:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 109: goto st108;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto tr178;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st108:
 	if ( ++p == pe )
 		goto _test_eof108;
 case 108:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 84: goto st109;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto st109;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st109:
 	if ( ++p == pe )
 		goto _test_eof109;
 case 109:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st110;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 116: goto tr181;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr180;
 st110:
 	if ( ++p == pe )
 		goto _test_eof110;
 case 110:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto st111;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 109: goto tr182;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st111:
 	if ( ++p == pe )
 		goto _test_eof111;
 case 111:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st112;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 109: goto st112;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st112:
 	if ( ++p == pe )
 		goto _test_eof112;
 case 112:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st113;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 109: goto st113;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st113:
 	if ( ++p == pe )
 		goto _test_eof113;
 case 113:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto tr181;
+		case 46: goto tr72;
+		case 84: goto st114;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st114:
 	if ( ++p == pe )
 		goto _test_eof114;
 case 114:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 97: goto st115;
-		case 101: goto st117;
-		case 114: goto st122;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st115;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st115:
 	if ( ++p == pe )
 		goto _test_eof115;
 case 115:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
 		case 110: goto st116;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st116:
 	if ( ++p == pe )
 		goto _test_eof116;
 case 116:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 104: goto tr187;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st117;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr186;
+		goto tr72;
+	goto tr71;
 st117:
 	if ( ++p == pe )
 		goto _test_eof117;
 case 117:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 110: goto st118;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st118;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st118:
 	if ( ++p == pe )
 		goto _test_eof118;
 case 118:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 115: goto st119;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto tr190;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st119:
 	if ( ++p == pe )
 		goto _test_eof119;
 case 119:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st120;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 97: goto st120;
+		case 101: goto st122;
+		case 105: goto st127;
+		case 114: goto st129;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st120:
 	if ( ++p == pe )
 		goto _test_eof120;
 case 120:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto tr191;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto st121;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
-tr191:
-#line 1 "NONE"
-	{te = p+1;}
-	goto st121;
+		goto tr72;
+	goto tr71;
 st121:
 	if ( ++p == pe )
 		goto _test_eof121;
 case 121:
-#line 2966 "fieldExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 58: goto st8;
-		case 95: goto tr67;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 104: goto tr197;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr192;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 58 )
-		goto st9;
-	goto tr9;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 73 )
-		goto tr11;
-	goto tr9;
+		goto tr72;
+	goto tr196;
 st122:
 	if ( ++p == pe )
 		goto _test_eof122;
 case 122:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 117: goto st123;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 110: goto st123;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st123:
 	if ( ++p == pe )
 		goto _test_eof123;
 case 123:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto tr195;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 115: goto st124;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st124:
 	if ( ++p == pe )
 		goto _test_eof124;
 case 124:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 101: goto st125;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st125;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st125:
 	if ( ++p == pe )
 		goto _test_eof125;
 case 125:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 99: goto st126;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto tr201;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
+tr201:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st126;
 st126:
 	if ( ++p == pe )
 		goto _test_eof126;
 case 126:
+#line 3085 "fieldExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 116: goto st127;
+		case 46: goto tr72;
+		case 58: goto st8;
+		case 95: goto tr72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr202;
+st8:
+	if ( ++p == pe )
+		goto _test_eof8;
+case 8:
+	if ( (*p) == 58 )
+		goto st9;
+	goto tr9;
+st9:
+	if ( ++p == pe )
+		goto _test_eof9;
+case 9:
+	if ( (*p) == 73 )
+		goto tr11;
+	goto tr9;
 st127:
 	if ( ++p == pe )
 		goto _test_eof127;
 case 127:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 111: goto st128;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 109: goto st128;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
 st128:
 	if ( ++p == pe )
 		goto _test_eof128;
 case 128:
 	switch( (*p) ) {
-		case 46: goto tr67;
-		case 95: goto tr67;
-		case 114: goto tr200;
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto tr205;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr67;
+			goto tr72;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr67;
+			goto tr72;
 	} else
-		goto tr67;
-	goto tr66;
+		goto tr72;
+	goto tr71;
+st129:
+	if ( ++p == pe )
+		goto _test_eof129;
+case 129:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 117: goto st130;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st130:
+	if ( ++p == pe )
+		goto _test_eof130;
+case 130:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto tr207;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st131:
+	if ( ++p == pe )
+		goto _test_eof131;
+case 131:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 101: goto st132;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st132:
+	if ( ++p == pe )
+		goto _test_eof132;
+case 132:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 99: goto st133;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st133:
+	if ( ++p == pe )
+		goto _test_eof133;
+case 133:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 116: goto st134;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st134:
+	if ( ++p == pe )
+		goto _test_eof134;
+case 134:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 111: goto st135;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+st135:
+	if ( ++p == pe )
+		goto _test_eof135;
+case 135:
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 95: goto tr72;
+		case 114: goto tr212;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr71;
+tr212:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st136;
+st136:
+	if ( ++p == pe )
+		goto _test_eof136;
+case 136:
+#line 3284 "fieldExprScanner.cc"
+	switch( (*p) ) {
+		case 46: goto tr72;
+		case 58: goto st10;
+		case 95: goto tr72;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr72;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr72;
+	} else
+		goto tr72;
+	goto tr213;
 st10:
 	if ( ++p == pe )
 		goto _test_eof10;
 case 10:
+	if ( (*p) == 58 )
+		goto st11;
+	goto tr12;
+st11:
+	if ( ++p == pe )
+		goto _test_eof11;
+case 11:
+	switch( (*p) ) {
+		case 120: goto tr14;
+		case 121: goto tr15;
+		case 122: goto tr16;
+	}
+	goto tr12;
+st12:
+	if ( ++p == pe )
+		goto _test_eof12;
+case 12:
 	if ( (*p) == 124 )
-		goto tr12;
+		goto tr17;
 	goto st0;
 	}
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
 	_test_eof13: cs = 13; goto _test_eof; 
+	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof15: cs = 15; goto _test_eof; 
 	_test_eof1: cs = 1; goto _test_eof; 
 	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof16: cs = 16; goto _test_eof; 
 	_test_eof3: cs = 3; goto _test_eof; 
 	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof17: cs = 17; goto _test_eof; 
 	_test_eof18: cs = 18; goto _test_eof; 
+	_test_eof5: cs = 5; goto _test_eof; 
+	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof19: cs = 19; goto _test_eof; 
 	_test_eof20: cs = 20; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof21: cs = 21; goto _test_eof; 
 	_test_eof22: cs = 22; goto _test_eof; 
+	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof23: cs = 23; goto _test_eof; 
 	_test_eof24: cs = 24; goto _test_eof; 
 	_test_eof25: cs = 25; goto _test_eof; 
@@ -3243,149 +3436,167 @@ case 10:
 	_test_eof119: cs = 119; goto _test_eof; 
 	_test_eof120: cs = 120; goto _test_eof; 
 	_test_eof121: cs = 121; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof122: cs = 122; goto _test_eof; 
 	_test_eof123: cs = 123; goto _test_eof; 
 	_test_eof124: cs = 124; goto _test_eof; 
 	_test_eof125: cs = 125; goto _test_eof; 
 	_test_eof126: cs = 126; goto _test_eof; 
+	_test_eof8: cs = 8; goto _test_eof; 
+	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof127: cs = 127; goto _test_eof; 
 	_test_eof128: cs = 128; goto _test_eof; 
+	_test_eof129: cs = 129; goto _test_eof; 
+	_test_eof130: cs = 130; goto _test_eof; 
+	_test_eof131: cs = 131; goto _test_eof; 
+	_test_eof132: cs = 132; goto _test_eof; 
+	_test_eof133: cs = 133; goto _test_eof; 
+	_test_eof134: cs = 134; goto _test_eof; 
+	_test_eof135: cs = 135; goto _test_eof; 
+	_test_eof136: cs = 136; goto _test_eof; 
 	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof11: cs = 11; goto _test_eof; 
+	_test_eof12: cs = 12; goto _test_eof; 
 
 	_test_eof: {}
 	if ( p == eof )
 	{
 	switch ( cs ) {
-	case 12: goto tr51;
-	case 13: goto tr52;
-	case 14: goto tr54;
-	case 15: goto tr56;
+	case 14: goto tr56;
+	case 15: goto tr57;
 	case 16: goto tr59;
+	case 17: goto tr61;
+	case 18: goto tr64;
 	case 5: goto tr5;
 	case 6: goto tr5;
-	case 17: goto tr59;
-	case 18: goto tr61;
-	case 19: goto tr59;
-	case 20: goto tr62;
+	case 19: goto tr64;
+	case 20: goto tr66;
 	case 21: goto tr64;
-	case 22: goto tr66;
-	case 23: goto tr68;
-	case 24: goto tr66;
-	case 25: goto tr66;
-	case 26: goto tr66;
-	case 27: goto tr66;
-	case 28: goto tr66;
-	case 29: goto tr66;
-	case 30: goto tr66;
-	case 31: goto tr66;
-	case 32: goto tr66;
-	case 33: goto tr66;
-	case 34: goto tr66;
-	case 35: goto tr84;
-	case 36: goto tr66;
-	case 37: goto tr66;
-	case 38: goto tr66;
-	case 39: goto tr66;
-	case 40: goto tr66;
-	case 41: goto tr66;
-	case 42: goto tr66;
-	case 43: goto tr66;
-	case 44: goto tr66;
-	case 45: goto tr66;
-	case 46: goto tr66;
-	case 47: goto tr66;
-	case 48: goto tr99;
-	case 49: goto tr66;
-	case 50: goto tr66;
-	case 51: goto tr66;
-	case 52: goto tr66;
-	case 53: goto tr66;
-	case 54: goto tr66;
-	case 55: goto tr66;
-	case 56: goto tr66;
-	case 57: goto tr66;
-	case 58: goto tr66;
-	case 59: goto tr66;
-	case 60: goto tr66;
-	case 61: goto tr66;
-	case 62: goto tr66;
-	case 63: goto tr66;
-	case 64: goto tr116;
-	case 65: goto tr66;
-	case 66: goto tr66;
-	case 67: goto tr66;
-	case 68: goto tr123;
-	case 69: goto tr66;
-	case 70: goto tr66;
-	case 71: goto tr66;
-	case 72: goto tr66;
-	case 73: goto tr66;
-	case 74: goto tr130;
-	case 75: goto tr66;
-	case 76: goto tr66;
-	case 77: goto tr136;
-	case 78: goto tr66;
-	case 79: goto tr66;
-	case 80: goto tr66;
-	case 81: goto tr66;
-	case 82: goto tr66;
-	case 83: goto tr66;
-	case 84: goto tr66;
-	case 85: goto tr66;
-	case 86: goto tr66;
-	case 87: goto tr66;
-	case 88: goto tr66;
-	case 89: goto tr155;
-	case 90: goto tr66;
-	case 91: goto tr66;
-	case 92: goto tr66;
-	case 93: goto tr66;
-	case 94: goto tr66;
-	case 95: goto tr66;
-	case 96: goto tr66;
-	case 97: goto tr66;
-	case 98: goto tr66;
-	case 99: goto tr66;
-	case 100: goto tr66;
-	case 101: goto tr66;
-	case 102: goto tr66;
-	case 103: goto tr66;
-	case 104: goto tr171;
-	case 105: goto tr66;
-	case 106: goto tr66;
-	case 107: goto tr66;
-	case 108: goto tr66;
-	case 109: goto tr66;
-	case 110: goto tr66;
-	case 111: goto tr66;
-	case 112: goto tr66;
-	case 113: goto tr66;
-	case 114: goto tr66;
-	case 115: goto tr66;
-	case 116: goto tr186;
-	case 117: goto tr66;
-	case 118: goto tr66;
-	case 119: goto tr66;
-	case 120: goto tr66;
-	case 121: goto tr192;
+	case 22: goto tr67;
+	case 23: goto tr69;
+	case 24: goto tr71;
+	case 25: goto tr73;
+	case 26: goto tr71;
+	case 27: goto tr71;
+	case 28: goto tr71;
+	case 29: goto tr71;
+	case 30: goto tr71;
+	case 31: goto tr71;
+	case 32: goto tr71;
+	case 33: goto tr71;
+	case 34: goto tr71;
+	case 35: goto tr71;
+	case 36: goto tr71;
+	case 37: goto tr89;
+	case 38: goto tr71;
+	case 39: goto tr71;
+	case 40: goto tr71;
+	case 41: goto tr71;
+	case 42: goto tr71;
+	case 43: goto tr71;
+	case 44: goto tr71;
+	case 45: goto tr71;
+	case 46: goto tr71;
+	case 47: goto tr71;
+	case 48: goto tr71;
+	case 49: goto tr71;
+	case 50: goto tr104;
+	case 51: goto tr71;
+	case 52: goto tr71;
+	case 53: goto tr71;
+	case 54: goto tr71;
+	case 55: goto tr71;
+	case 56: goto tr71;
+	case 57: goto tr71;
+	case 58: goto tr71;
+	case 59: goto tr71;
+	case 60: goto tr71;
+	case 61: goto tr71;
+	case 62: goto tr71;
+	case 63: goto tr71;
+	case 64: goto tr71;
+	case 65: goto tr71;
+	case 66: goto tr71;
+	case 67: goto tr71;
+	case 68: goto tr71;
+	case 69: goto tr125;
+	case 70: goto tr71;
+	case 71: goto tr71;
+	case 72: goto tr71;
+	case 73: goto tr132;
+	case 74: goto tr71;
+	case 75: goto tr71;
+	case 76: goto tr71;
+	case 77: goto tr71;
+	case 78: goto tr71;
+	case 79: goto tr139;
+	case 80: goto tr71;
+	case 81: goto tr71;
+	case 82: goto tr145;
+	case 83: goto tr71;
+	case 84: goto tr71;
+	case 85: goto tr71;
+	case 86: goto tr71;
+	case 87: goto tr71;
+	case 88: goto tr71;
+	case 89: goto tr71;
+	case 90: goto tr71;
+	case 91: goto tr71;
+	case 92: goto tr71;
+	case 93: goto tr71;
+	case 94: goto tr164;
+	case 95: goto tr71;
+	case 96: goto tr71;
+	case 97: goto tr71;
+	case 98: goto tr71;
+	case 99: goto tr71;
+	case 100: goto tr71;
+	case 101: goto tr71;
+	case 102: goto tr71;
+	case 103: goto tr71;
+	case 104: goto tr71;
+	case 105: goto tr71;
+	case 106: goto tr71;
+	case 107: goto tr71;
+	case 108: goto tr71;
+	case 109: goto tr180;
+	case 110: goto tr71;
+	case 111: goto tr71;
+	case 112: goto tr71;
+	case 113: goto tr71;
+	case 114: goto tr71;
+	case 115: goto tr71;
+	case 116: goto tr71;
+	case 117: goto tr71;
+	case 118: goto tr71;
+	case 119: goto tr71;
+	case 120: goto tr71;
+	case 121: goto tr196;
+	case 122: goto tr71;
+	case 123: goto tr71;
+	case 124: goto tr71;
+	case 125: goto tr71;
+	case 126: goto tr202;
 	case 8: goto tr9;
 	case 9: goto tr9;
-	case 122: goto tr66;
-	case 123: goto tr66;
-	case 124: goto tr66;
-	case 125: goto tr66;
-	case 126: goto tr66;
-	case 127: goto tr66;
-	case 128: goto tr66;
+	case 127: goto tr71;
+	case 128: goto tr71;
+	case 129: goto tr71;
+	case 130: goto tr71;
+	case 131: goto tr71;
+	case 132: goto tr71;
+	case 133: goto tr71;
+	case 134: goto tr71;
+	case 135: goto tr71;
+	case 136: goto tr213;
+	case 10: goto tr12;
+	case 11: goto tr12;
 	}
 	}
 
 	_out: {}
 	}
 
-#line 537 "fieldExprScanner.rl"
+#line 568 "fieldExprScanner.rl"
    /* ^^^ FSM execution here ^^^ */;
 
     if (0 == cs)
@@ -3399,7 +3610,7 @@ case 10:
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)
diff --git a/src/OpenFOAM/expressions/fields/fieldExprScanner.rl b/src/OpenFOAM/expressions/fields/fieldExprScanner.rl
index e2377ac5bc03547b93c844d8c82062a30e7f66d2..4fded905430aa899a313b8c543338b37b6c48bb8 100644
--- a/src/OpenFOAM/expressions/fields/fieldExprScanner.rl
+++ b/src/OpenFOAM/expressions/fields/fieldExprScanner.rl
@@ -28,6 +28,7 @@ Description
 
 \*---------------------------------------------------------------------------*/
 
+#include "exprScanToken.H"
 #include "fieldExprScanner.H"
 #include "fieldExprDriver.H"
 #include "fieldExprLemonParser.h"
@@ -42,7 +43,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -55,8 +55,9 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
+// No known look-back types
 #undef HAS_LOOKBEHIND_TOKENS
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
@@ -121,22 +122,27 @@ static int driverTokenType
     const word& ident
 )
 {
+    #ifdef HAS_LOOKBEHIND_TOKENS
+    // Get stashed "look-behind" to decide what type of identifier we expect
+    #endif
+
     // Field variables
     #ifdef TOK_SCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isLocalVariable<Type>(ident, false))                      \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isLocalVariable<Type>(ident, false))            \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SCALAR_ID, scalar);
-        checkFieldToken(TOK_VECTOR_ID, vector);
-        checkFieldToken(TOK_SYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_TENSOR_ID, tensor);
-        // Not tested: checkFieldToken(TOK_BOOL_ID, bool);
+        doLocalCode(TOK_SCALAR_ID, scalar);
+        doLocalCode(TOK_VECTOR_ID, vector);
+        doLocalCode(TOK_SYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_TENSOR_ID, tensor);
+        // Not tested: doLocalCode(TOK_BOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
@@ -156,7 +162,15 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
@@ -165,15 +179,18 @@ static int driverTokenType
     write   data;
 
     action emit_number {
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -187,15 +204,16 @@ static int driverTokenType
     }
 
     action emit_ident {
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 
     action emit_method {
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }
 
@@ -213,7 +231,7 @@ static int driverTokenType
     number => emit_number;
 
     ## Operators
-    '!'  =>{ EMIT_TOKEN(NOT); };
+    '!'  =>{ EMIT_TOKEN(LNOT); };
     '%'  =>{ EMIT_TOKEN(PERCENT); };
     '('  =>{ EMIT_TOKEN(LPAREN); };
     ')'  =>{ EMIT_TOKEN(RPAREN); };
@@ -234,7 +252,7 @@ static int driverTokenType
     '&&' =>{ EMIT_TOKEN(LAND); };
     '||' =>{ EMIT_TOKEN(LOR); };
     '&'  =>{ EMIT_TOKEN(BIT_AND); };
-## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OK); };
+## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OR); };
     '^'  =>{ EMIT_TOKEN(BIT_XOR); };
 
     ## Some '.method' - Error if unknown
@@ -286,13 +304,16 @@ static int driverTokenType
     "sphericalTensor" =>{ EMIT_TOKEN(SPH_TENSOR); };
 
     ## Single value (constants, etc)
-    "Zero"      =>{ EMIT_TOKEN(ZERO); };
     "true"      =>{ EMIT_TOKEN(LTRUE); };
     "false"     =>{ EMIT_TOKEN(LFALSE); };
+    "Zero"      =>{ EMIT_TOKEN(ZERO); };
+    "vector::x" =>{ EMIT_VECTOR_TOKEN(1,0,0); };
+    "vector::y" =>{ EMIT_VECTOR_TOKEN(0,1,0); };
+    "vector::z" =>{ EMIT_VECTOR_TOKEN(0,0,1); };
     "tensor::I" =>{ EMIT_TOKEN(IDENTITY_TENSOR); };
     "arg"       =>{ EMIT_TOKEN(ARG); };
-##    "time"      =>{ EMIT_TOKEN(TIME); };
-##    "deltaT"    =>{ EMIT_TOKEN(DELTA_T); };
+    "time"      =>{ EMIT_TOKEN(TIME); };
+    "deltaT"    =>{ EMIT_TOKEN(DELTA_T); };
 
     ## Identifier (field, etc - error if unknown)
     ## Handle 'bare' names and single/double quoted ones
@@ -321,8 +342,7 @@ Foam::expressions::fieldExpr::scanner::~scanner()
 bool Foam::expressions::fieldExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -339,8 +359,8 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -353,10 +373,11 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_method
 bool Foam::expressions::fieldExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -381,12 +402,12 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -396,17 +417,28 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -414,8 +446,9 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -447,12 +480,13 @@ bool Foam::expressions::fieldExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -515,9 +549,6 @@ bool Foam::expressions::fieldExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -547,7 +578,7 @@ bool Foam::expressions::fieldExpr::scanner::process
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)
diff --git a/src/OpenFOAM/expressions/scanToken/exprScanToken.C b/src/OpenFOAM/expressions/scanToken/exprScanToken.C
new file mode 100644
index 0000000000000000000000000000000000000000..63d6f87f8cd1a266ff098da10018ec4e678e6a8a
--- /dev/null
+++ b/src/OpenFOAM/expressions/scanToken/exprScanToken.C
@@ -0,0 +1,92 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "exprScanToken.H"
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::expressions::scanToken Foam::expressions::scanToken::null()
+{
+    scanToken tok;
+    tok.type_ = LABEL;
+    tok.labelValue = 0;
+
+    return tok;
+}
+
+
+void Foam::expressions::scanToken::destroy()
+{
+    if (type_ == VECTOR)
+    {
+        delete vectorPtr;
+        vectorPtr = nullptr;
+    }
+    else if (type_ == WORD)
+    {
+        delete wordPtr;
+        wordPtr = nullptr;
+    }
+}
+
+
+void Foam::expressions::scanToken::setLabel(label val)
+{
+    type_ = LABEL;
+    labelValue = val;
+}
+
+
+void Foam::expressions::scanToken::setScalar(scalar val)
+{
+    type_ = SCALAR;
+    scalarValue = val;
+}
+
+
+void Foam::expressions::scanToken::setVector(scalar x, scalar y, scalar z)
+{
+    type_ = VECTOR;
+    vectorPtr = new Foam::vector(x, y, z);
+}
+
+
+void Foam::expressions::scanToken::setVector(const vector& val)
+{
+    type_ = VECTOR;
+    vectorPtr = new Foam::vector(val);
+}
+
+
+void Foam::expressions::scanToken::setWord(const word& val)
+{
+    type_ = WORD;
+    wordPtr = new Foam::word(val);
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/expressions/scanToken/exprScanToken.H b/src/OpenFOAM/expressions/scanToken/exprScanToken.H
new file mode 100644
index 0000000000000000000000000000000000000000..5bdf2f6357cb9eeeefdc19417936aaefb8b9187b
--- /dev/null
+++ b/src/OpenFOAM/expressions/scanToken/exprScanToken.H
@@ -0,0 +1,116 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | www.openfoam.com
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+    Copyright (C) 2019-2021 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::expressions::scanToken
+
+Description
+    A low-level input/scan token content.
+    No defined constructors/destructors.
+    All memory management is manual!
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef expressions_scanToken_H
+#define expressions_scanToken_H
+
+#include "scalar.H"
+#include "vector.H"
+#include "word.H"
+
+namespace Foam
+{
+namespace expressions
+{
+
+/*---------------------------------------------------------------------------*\
+                          Class scanToken Declaration
+\*---------------------------------------------------------------------------*/
+
+struct scanToken
+{
+    //- Tagged union types
+    enum tokenType : unsigned char
+    {
+        LABEL = 0,
+        SCALAR,
+        VECTOR,
+        WORD
+    };
+
+
+    // Data
+
+        //- The data content (as a union).
+        //  For memory alignment have this appear as the first member.
+        union
+        {
+            Foam::label    labelValue;
+            Foam::scalar   scalarValue;
+            Foam::vector*  vectorPtr;
+            Foam::word*    wordPtr;
+            Foam::word*    name_;
+        };
+
+        //- The token type
+        tokenType type_;
+
+
+    // Member Functions
+
+        //- Return a null token - in lieu of a default constructor
+        static scanToken null();
+
+        //- Assign type/value to be LABEL. Does not call destroy().
+        void setLabel(label val);
+
+        //- Assign type/value to be SCALAR. Does not call destroy().
+        void setScalar(scalar val);
+
+        //- Assign type/value to be VECTOR. Does not call destroy().
+        void setVector(scalar x, scalar y, scalar z);
+
+        //- Assign type/value to be VECTOR. Does not call destroy().
+        void setVector(const vector& val);
+
+        //- Assign type/value to be WORD (name). Does not call destroy().
+        void setWord(const word& val);
+
+        //- Manual deletion of pointer types
+        void destroy();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace expressions
+} // End namespace Foam
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/include/m4/bison/named-characters.m4 b/src/OpenFOAM/include/m4/bison/named-characters.m4
index 62f6ebdefdaf460117ab73fd090428985b554eaf..57d9858a983f8ef7462e5966b7045998a5d732d6 100644
--- a/src/OpenFOAM/include/m4/bison/named-characters.m4
+++ b/src/OpenFOAM/include/m4/bison/named-characters.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Named versions (as m4 macros) of single quoted characters to avoid
diff --git a/src/OpenFOAM/include/m4/lemon/base-setup.m4 b/src/OpenFOAM/include/m4/lemon/base-setup.m4
index 6324a2419dbb35d32f4238b23cd07c9879549cd2..5942e5a4cf42e6c77101bd36860b25e1686a3f1a 100644
--- a/src/OpenFOAM/include/m4/lemon/base-setup.m4
+++ b/src/OpenFOAM/include/m4/lemon/base-setup.m4
@@ -6,11 +6,10 @@ divert(-1)dnl
 #     \\  /    A nd           | www.openfoam.com
 #      \\/     M anipulation  |
 #------------------------------------------------------------------------------
-#     Copyright (C) 2019 OpenCFD Ltd.
+#     Copyright (C) 2019-2021 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     A collection of 'base' setup of m4 macros for lemon, and setup
@@ -34,7 +33,7 @@ divert(-1)dnl
 #     _sphTensor_, _symTensor_, _tensor_
 #
 # Values for the currently targeted rule
-#     _target_, _value_type_
+#     _target_, _value_type_, _scalar_arg_
 #
 # Note
 #     The `undefine' occur immediately upon inclusion of this file.
@@ -109,18 +108,19 @@ Foam::tmp<T> make_tmp(T* p)
 
 //- Default [make_obj] is pass-through
 template<class T>
-const T& make_obj(const T& obj)
+const T& make_obj(const T& o) noexcept
 {
-    return obj;
+    return o;
 }
 
 //- Move construct an object from a pointer and destroy the pointer
 template<class T>
-T make_obj(T* p)
+T make_obj(T*& p)
 {
-    T obj(std::move(*p));
+    T o(std::move(*p));
     delete p;
-    return obj;
+    p = nullptr;  // Prevent caller from deleting too
+    return o;
 }]
 )
 
@@ -149,6 +149,7 @@ undefine([_tensor_])
 
 undefine([_target_])
 undefine([_value_type_])
+undefine([_scalar_arg_])
 
 #------------------------------------------------------------------------------
 divert(0)dnl
diff --git a/src/OpenFOAM/include/m4/lemon/operator-precedence.m4 b/src/OpenFOAM/include/m4/lemon/operator-precedence.m4
index a8e1baa6980a6a69cfb1ee210f11f6de27c0574f..33d317f45fc629f7d58d07b0c9a3728ac4f94e3e 100644
--- a/src/OpenFOAM/include/m4/lemon/operator-precedence.m4
+++ b/src/OpenFOAM/include/m4/lemon/operator-precedence.m4
@@ -6,11 +6,10 @@ divert(-1)dnl
 #     \\  /    A nd           | www.openfoam.com
 #      \\/     M anipulation  |
 #------------------------------------------------------------------------------
-#     Copyright (C) 2019 OpenCFD Ltd.
+#     Copyright (C) 2019-2021 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Defines standard operator precedence macro for lemon grammar.
@@ -20,18 +19,34 @@ divert(-1)dnl
 
 define([operator_precedence],
 [// [https://en.cppreference.com/w/cpp/language/operator_precedence]
-%right QUESTION COLON .                 // 16: right-to-left
-%left LOR  .                            // 15:
-%left LAND .                            // 14:
-// %left BIT_OR  .                        // 13 (unused)
-%left BIT_XOR .                         // 12
-%left BIT_AND .                         // 11
-%left EQUAL NOT_EQUAL .                 // 10
-%left LESS_EQ GREATER_EQ LESS GREATER . // 9
-%left PLUS MINUS .                      // 6
-%left TIMES DIVIDE PERCENT .            // 5
-%right NEGATE NOT .                     // 3: right-to-left
-%left DOT  .                            // 2: (method)]
+%right QUESTION COLON .                 // 13: right-to-left
+%left LOR  .                            // 12:
+%left LAND .                            // 11:
+%left BIT_OR  .                         // 10 (unused)
+%left BIT_XOR .                         // 9
+%left BIT_AND .                         // 8
+%left EQUAL NOT_EQUAL .                 // 7
+%left LESS LESS_EQ GREATER GREATER_EQ . // 6
+%left PLUS MINUS .                      // 4
+%left TIMES DIVIDE PERCENT .            // 3
+%right NEGATE LNOT BIT_NOT .            // 2: right-to-left
+%left DOT  .                            // 1: (method)]
+)
+
+
+define([standard_tokens],
+[// Standard tokens for operators, constants and common types]
+%token
+  LPAREN RPAREN COMMA
+  QUESTION COLON LOR LAND LNOT
+  BIT_OR BIT_XOR BIT_AND BIT_NOT
+  EQUAL NOT_EQUAL
+  LESS LESS_EQ GREATER GREATER_EQ
+  PLUS MINUS TIMES DIVIDE PERCENT
+  NEGATE DOT
+  BOOL LTRUE LFALSE
+  NUMBER ZERO IDENTIFIER
+.
 )
 
 #------------------------------------------------------------------------------
diff --git a/src/OpenFOAM/include/m4/lemon/parser-methods.m4 b/src/OpenFOAM/include/m4/lemon/parser-methods.m4
index 3fda03d39544cde6712b59c6fbe23c211fcd0f4a..521bca030877fe34515aea7f32a6eec241d373b0 100644
--- a/src/OpenFOAM/include/m4/lemon/parser-methods.m4
+++ b/src/OpenFOAM/include/m4/lemon/parser-methods.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Various "boilerplate" parser methods (C++)
diff --git a/src/OpenFOAM/include/m4/lemon/rules-components.m4 b/src/OpenFOAM/include/m4/lemon/rules-components.m4
index f39704f1e0a8f36d0479cf3635e4f7cd0fe308c9..7f98389b546e51205b57412802fd57ba8f89e5b2 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-components.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-components.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Collection of VectorSpace `component' functions
diff --git a/src/OpenFOAM/include/m4/lemon/rules-fields-components.m4 b/src/OpenFOAM/include/m4/lemon/rules-fields-components.m4
index 3aa67c0e3a7cc2c5705c3751df45f2f60fd84035..93bcd77fc3ba793a4c35a669756eb303acf16f1a 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-fields-components.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-fields-components.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Rules for vector/tensor `zip' functions, which are used to combine
diff --git a/src/OpenFOAM/include/m4/lemon/rules-fields.m4 b/src/OpenFOAM/include/m4/lemon/rules-fields.m4
index 2f2faf2169f846418b340187f450b8b6967580c1..2b0f4396a6f7e8f7a0f934c8e3e909748fdc10d3 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-fields.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-fields.m4
@@ -62,39 +62,20 @@ define([_get_]$1, [driver->$5<$3>($][1).ptr()])dnl
 # Example
 # rule_get_field(sfield, SCALAR_ID)
 #
-# sfield (lhs) ::= SCALAR_ID (ident) .
+# sfield (lhs) ::= SCALAR_ID (name) .
 # {
-#     lhs = driver->getVolField<Foam::scalar>(make_obj(ident->name)).ptr();
+#     lhs = driver->getVolField<Foam::scalar>(make_obj(name.name_)).ptr();
 # }
 #------------------------------------------------------------------------------
 
 define([rule_get_field],
-[$1 (lhs) ::= $2 (ident) .
+[$1 (lhs) ::= $2 (name) .
 {
-    lhs = _get_$1(make_obj(ident->name));
+    lhs = _get_$1(make_obj(name.name_));
 }]
 )
 
 
-#------------------------------------------------------------------------------
-# rule_driver_select(out, tok, method)
-#
-# Description
-#     Production rule for driver get cell/face/point selection methods
-#
-# Example
-# rule_driver_select(sfield, CSET, field_cellSet)
-#
-# sfield (lhs) ::= CSET LPAREN IDENTIFIER (ident) RPAREN .
-# {
-#     lhs = driver->field_cellSet(make_obj(ident->name)).ptr();
-# }
-#------------------------------------------------------------------------------
-
-define([rule_driver_select],
-[rule_driver_unary_named($1, $2, IDENTIFIER, $3)])
-
-
 #------------------------------------------------------------------------------
 # rule_field_from_value(out, in, [prefix])
 #
@@ -454,19 +435,19 @@ ifelse($5,[],[],[<$5>])dnl      # Optional template parameter (value_type)
 #        Foam::scalar
 #    )
 #
-# sfield(lhs) ::= SN_GRAD LPAREN SCALAR_ID (ident) RPAREN .
+# sfield(lhs) ::= SN_GRAD LPAREN SCALAR_ID (name) RPAREN .
 # {
-#     lhs = driver->patchNormalField<Foam::scalar>(make_obj(ident->name)).ptr();
+#     lhs = driver->patchNormalField<Foam::scalar>(make_obj(name.name_)).ptr();
 # }
 #
 #------------------------------------------------------------------------------
 
 define([rule_driver_unary_named],
-[$1 (lhs) ::= $2 LPAREN $3 (ident) RPAREN .
+[$1 (lhs) ::= $2 LPAREN $3 (name) RPAREN .
 {
     lhs = driver->$4[]dnl       # The method call
 ifelse($5,[],[],[<$5>])dnl      # Optional template parameter (value_type)
-(make_obj(ident->name)).ptr();
+(make_obj(name.name_)).ptr();
 }]
 )
 
diff --git a/src/OpenFOAM/include/m4/lemon/rules-functions.m4 b/src/OpenFOAM/include/m4/lemon/rules-functions.m4
index 57d5c429bf7b16dcf2fdc83614d17a29833f7982..c59c38bb3484c16102345f14bebd32b226bcacee 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-functions.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-functions.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Collection of `standard' functions and type-specific ones.
diff --git a/src/OpenFOAM/include/m4/lemon/rules-operations.m4 b/src/OpenFOAM/include/m4/lemon/rules-operations.m4
index a1297a34ff531f39cdf0a5263d9475a945b348ea..7c68751b6ad6c8e5f6a054788b9d34211b469a33 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-operations.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-operations.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Collection of `standard' operations and type-specific ones.
diff --git a/src/OpenFOAM/include/m4/lemon/rules-scalar-logic.m4 b/src/OpenFOAM/include/m4/lemon/rules-scalar-logic.m4
index 60861e2805f450fc5e9e6d5676e078790e31f167..34329308b295eaa2b42c9010d6e645121bd0c2ca 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-scalar-logic.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-scalar-logic.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Logic rules, using bool or Foam::scalar for its storage.
@@ -98,7 +97,7 @@ define([rule_logical_or],
 )
 
 define([rule_logical_negate],
-[$1 (lhs) ::= NOT $1 (a). _lemon_precedence(NEGATE)
+[$1 (lhs) ::= LNOT $1 (a). _lemon_precedence(NEGATE)
 {
     lhs = a;
     Foam::FieldOps::assign
diff --git a/src/OpenFOAM/include/m4/lemon/rules-standard.m4 b/src/OpenFOAM/include/m4/lemon/rules-standard.m4
index f88ce9fc001e555a4f8facb737104869b0246add..153be7f19c043463658a4c54abc7d66438b22dda 100644
--- a/src/OpenFOAM/include/m4/lemon/rules-standard.m4
+++ b/src/OpenFOAM/include/m4/lemon/rules-standard.m4
@@ -9,8 +9,7 @@ divert(-1)dnl
 #     Copyright (C) 2019 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
-#     This file is part of OpenFOAM, distributed under GNU General Public
-#     License GPL-3.0 or later <https://www.gnu.org/licenses/gpl-3.0>
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
 #
 # Description
 #     Collection of common functions that should work on all (non-logical)
diff --git a/src/finiteVolume/expressions/patch/patchExprFwd.H b/src/finiteVolume/expressions/patch/patchExprFwd.H
index cd04bcbf6cabdc16ff105904ef7691646f427e64..bb1a8bd6aff08c56a508e4816f5ebcfe85fde67e 100644
--- a/src/finiteVolume/expressions/patch/patchExprFwd.H
+++ b/src/finiteVolume/expressions/patch/patchExprFwd.H
@@ -47,7 +47,6 @@ namespace patchExpr
 class parser;
 class scanner;
 class parseDriver;
-union scanToken;
 
 //- Static debugging option
 extern int debug;
diff --git a/src/finiteVolume/expressions/patch/patchExprLemonParser.h b/src/finiteVolume/expressions/patch/patchExprLemonParser.h
index c57d09d11902dfa7cdefa74e598b8711afda9535..a011499f5adb5a8726d5b103ab2c602229246ba5 100644
--- a/src/finiteVolume/expressions/patch/patchExprLemonParser.h
+++ b/src/finiteVolume/expressions/patch/patchExprLemonParser.h
@@ -1,115 +1,125 @@
-#define TOK_QUESTION                         1
-#define TOK_COLON                            2
-#define TOK_LOR                              3
-#define TOK_LAND                             4
-#define TOK_BIT_XOR                          5
-#define TOK_BIT_AND                          6
-#define TOK_EQUAL                            7
-#define TOK_NOT_EQUAL                        8
-#define TOK_LESS_EQ                          9
-#define TOK_GREATER_EQ                      10
-#define TOK_LESS                            11
-#define TOK_GREATER                         12
-#define TOK_PLUS                            13
-#define TOK_MINUS                           14
-#define TOK_TIMES                           15
-#define TOK_DIVIDE                          16
-#define TOK_PERCENT                         17
-#define TOK_NEGATE                          18
-#define TOK_NOT                             19
-#define TOK_DOT                             20
-#define TOK_NUMBER                          21
-#define TOK_ZERO                            22
-#define TOK_PI                              23
-#define TOK_LPAREN                          24
-#define TOK_RPAREN                          25
-#define TOK_DEG_TO_RAD                      26
-#define TOK_RAD_TO_DEG                      27
-#define TOK_ARG                             28
-#define TOK_TIME                            29
-#define TOK_DELTA_T                         30
-#define TOK_SCALAR_ID                       31
-#define TOK_SSCALAR_ID                      32
-#define TOK_INTERNAL_FIELD                  33
-#define TOK_NEIGHBOUR_FIELD                 34
-#define TOK_SN_GRAD                         35
-#define TOK_MIN                             36
-#define TOK_COMMA                           37
-#define TOK_MAX                             38
-#define TOK_SUM                             39
-#define TOK_AVERAGE                         40
-#define TOK_EXP                             41
-#define TOK_LOG                             42
-#define TOK_LOG10                           43
-#define TOK_SQR                             44
-#define TOK_SQRT                            45
-#define TOK_CBRT                            46
-#define TOK_SIN                             47
-#define TOK_COS                             48
-#define TOK_TAN                             49
-#define TOK_ASIN                            50
-#define TOK_ACOS                            51
-#define TOK_ATAN                            52
-#define TOK_SINH                            53
-#define TOK_COSH                            54
-#define TOK_TANH                            55
-#define TOK_POW                             56
-#define TOK_ATAN2                           57
-#define TOK_POS                             58
-#define TOK_NEG                             59
-#define TOK_POS0                            60
-#define TOK_NEG0                            61
-#define TOK_SIGN                            62
-#define TOK_FLOOR                           63
-#define TOK_CEIL                            64
-#define TOK_ROUND                           65
-#define TOK_HYPOT                           66
-#define TOK_RAND                            67
-#define TOK_VECTOR_ID                       68
-#define TOK_SVECTOR_ID                      69
-#define TOK_SPH_TENSOR_ID                   70
-#define TOK_SSPH_TENSOR_ID                  71
-#define TOK_SYM_TENSOR_ID                   72
-#define TOK_SSYM_TENSOR_ID                  73
-#define TOK_IDENTITY_TENSOR                 74
-#define TOK_TENSOR_ID                       75
-#define TOK_STENSOR_ID                      76
-#define TOK_LTRUE                           77
-#define TOK_LFALSE                          78
-#define TOK_BOOL                            79
-#define TOK_SBOOL_ID                        80
-#define TOK_FACE_AREA                       81
-#define TOK_FACE_EXPR                       82
-#define TOK_WEIGHT_AVERAGE                  83
-#define TOK_WEIGHT_SUM                      84
-#define TOK_POINT_EXPR                      85
-#define TOK_PSCALAR_ID                      86
-#define TOK_PVECTOR_ID                      87
-#define TOK_PSPH_TENSOR_ID                  88
-#define TOK_PSYM_TENSOR_ID                  89
-#define TOK_PTENSOR_ID                      90
-#define TOK_PBOOL_ID                        91
-#define TOK_POINTS                          92
-#define TOK_MAG                             93
-#define TOK_MAGSQR                          94
-#define TOK_VECTOR                          95
-#define TOK_TENSOR                          96
-#define TOK_SYM_TENSOR                      97
-#define TOK_SPH_TENSOR                      98
-#define TOK_CMPT_X                          99
-#define TOK_CMPT_Y                         100
-#define TOK_CMPT_Z                         101
-#define TOK_CMPT_XX                        102
-#define TOK_CMPT_XY                        103
-#define TOK_CMPT_XZ                        104
-#define TOK_CMPT_YX                        105
-#define TOK_CMPT_YY                        106
-#define TOK_CMPT_YZ                        107
-#define TOK_CMPT_ZX                        108
-#define TOK_CMPT_ZY                        109
-#define TOK_CMPT_ZZ                        110
-#define TOK_CMPT_II                        111
-#define TOK_TRANSPOSE                      112
-#define TOK_DIAG                           113
-#define TOK_POINT_TO_FACE                  114
-#define TOK_FACE_TO_POINT                  115
+#define TOK_LPAREN                           1
+#define TOK_RPAREN                           2
+#define TOK_COMMA                            3
+#define TOK_QUESTION                         4
+#define TOK_COLON                            5
+#define TOK_LOR                              6
+#define TOK_LAND                             7
+#define TOK_LNOT                             8
+#define TOK_BIT_OR                           9
+#define TOK_BIT_XOR                         10
+#define TOK_BIT_AND                         11
+#define TOK_BIT_NOT                         12
+#define TOK_EQUAL                           13
+#define TOK_NOT_EQUAL                       14
+#define TOK_LESS                            15
+#define TOK_LESS_EQ                         16
+#define TOK_GREATER                         17
+#define TOK_GREATER_EQ                      18
+#define TOK_PLUS                            19
+#define TOK_MINUS                           20
+#define TOK_TIMES                           21
+#define TOK_DIVIDE                          22
+#define TOK_PERCENT                         23
+#define TOK_NEGATE                          24
+#define TOK_DOT                             25
+#define TOK_BOOL                            26
+#define TOK_LTRUE                           27
+#define TOK_LFALSE                          28
+#define TOK_NUMBER                          29
+#define TOK_ZERO                            30
+#define TOK_IDENTIFIER                      31
+#define TOK_PI                              32
+#define TOK_DEG_TO_RAD                      33
+#define TOK_RAD_TO_DEG                      34
+#define TOK_ARG                             35
+#define TOK_TIME                            36
+#define TOK_DELTA_T                         37
+#define TOK_SCALAR_FUNCTION_ID              38
+#define TOK_VECTOR_VALUE                    39
+#define TOK_VECTOR_FUNCTION_ID              40
+#define TOK_SCALAR_ID                       41
+#define TOK_SSCALAR_ID                      42
+#define TOK_INTERNAL_FIELD                  43
+#define TOK_NEIGHBOUR_FIELD                 44
+#define TOK_SN_GRAD                         45
+#define TOK_MIN                             46
+#define TOK_MAX                             47
+#define TOK_SUM                             48
+#define TOK_AVERAGE                         49
+#define TOK_EXP                             50
+#define TOK_LOG                             51
+#define TOK_LOG10                           52
+#define TOK_SQR                             53
+#define TOK_SQRT                            54
+#define TOK_CBRT                            55
+#define TOK_SIN                             56
+#define TOK_COS                             57
+#define TOK_TAN                             58
+#define TOK_ASIN                            59
+#define TOK_ACOS                            60
+#define TOK_ATAN                            61
+#define TOK_SINH                            62
+#define TOK_COSH                            63
+#define TOK_TANH                            64
+#define TOK_POW                             65
+#define TOK_ATAN2                           66
+#define TOK_POS                             67
+#define TOK_NEG                             68
+#define TOK_POS0                            69
+#define TOK_NEG0                            70
+#define TOK_SIGN                            71
+#define TOK_FLOOR                           72
+#define TOK_CEIL                            73
+#define TOK_ROUND                           74
+#define TOK_HYPOT                           75
+#define TOK_RAND                            76
+#define TOK_VECTOR_ID                       77
+#define TOK_SVECTOR_ID                      78
+#define TOK_SPH_TENSOR_ID                   79
+#define TOK_SSPH_TENSOR_ID                  80
+#define TOK_SYM_TENSOR_ID                   81
+#define TOK_SSYM_TENSOR_ID                  82
+#define TOK_IDENTITY_TENSOR                 83
+#define TOK_TENSOR_ID                       84
+#define TOK_STENSOR_ID                      85
+#define TOK_SBOOL_ID                        86
+#define TOK_CELL_SET                        87
+#define TOK_CELL_ZONE                       88
+#define TOK_FACE_SET                        89
+#define TOK_FACE_ZONE                       90
+#define TOK_FACE_AREA                       91
+#define TOK_FACE_EXPR                       92
+#define TOK_WEIGHT_AVERAGE                  93
+#define TOK_WEIGHT_SUM                      94
+#define TOK_POINT_EXPR                      95
+#define TOK_PSCALAR_ID                      96
+#define TOK_PVECTOR_ID                      97
+#define TOK_PSPH_TENSOR_ID                  98
+#define TOK_PSYM_TENSOR_ID                  99
+#define TOK_PTENSOR_ID                     100
+#define TOK_PBOOL_ID                       101
+#define TOK_POINTS                         102
+#define TOK_MAG                            103
+#define TOK_MAGSQR                         104
+#define TOK_VECTOR                         105
+#define TOK_TENSOR                         106
+#define TOK_SYM_TENSOR                     107
+#define TOK_SPH_TENSOR                     108
+#define TOK_CMPT_X                         109
+#define TOK_CMPT_Y                         110
+#define TOK_CMPT_Z                         111
+#define TOK_CMPT_XX                        112
+#define TOK_CMPT_XY                        113
+#define TOK_CMPT_XZ                        114
+#define TOK_CMPT_YX                        115
+#define TOK_CMPT_YY                        116
+#define TOK_CMPT_YZ                        117
+#define TOK_CMPT_ZX                        118
+#define TOK_CMPT_ZY                        119
+#define TOK_CMPT_ZZ                        120
+#define TOK_CMPT_II                        121
+#define TOK_TRANSPOSE                      122
+#define TOK_DIAG                           123
+#define TOK_POINT_TO_FACE                  124
+#define TOK_FACE_TO_POINT                  125
diff --git a/src/finiteVolume/expressions/patch/patchExprLemonParser.lyy-m4 b/src/finiteVolume/expressions/patch/patchExprLemonParser.lyy-m4
index fe4d6067ef01af6a2a0c8c8ba445a2d21b221758..0ebd48bc6b3a1cc4c7663979d6ed6f9115de19ff 100644
--- a/src/finiteVolume/expressions/patch/patchExprLemonParser.lyy-m4
+++ b/src/finiteVolume/expressions/patch/patchExprLemonParser.lyy-m4
@@ -42,6 +42,7 @@ Description
  */
 %include
 {
+#include "exprScanToken.H"
 #include "patchExprDriver.H"
 #include "patchExprParser.H"
 #include "patchExprScanner.H"
@@ -77,11 +78,8 @@ tmp_management()
 %token_prefix TOK_
 
 // Terminals
-%token_type    {Foam::expressions::patchExpr::scanToken*}
-// Non-terminals
-%type ivalue   { Foam::label }
-%type svalue   { Foam::scalar }
-%type ident    { Foam::word* }
+%token_type         {Foam::expressions::scanToken}
+%token_destructor   { ($$).destroy(); }
 
 // Face fields
 declare_field(lfield, Foam::boolField, bool, newField, getSurfaceField)
@@ -104,17 +102,33 @@ declare_field(ptfield, Foam::tensorField, Foam::tensor, newPointField, getPointF
 // Lemon does not generate a destructor for that.
 // So do not use Lemon destructors for anything.
 
+standard_tokens()
 operator_precedence()
 
 %start_symbol evaluate
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+/*---------------------------------------------------------------------------*\
+ * General Productions
+\*---------------------------------------------------------------------------*/
+
+%type identifier { Foam::word* }
+%destructor identifier { delete($$); $$ = nullptr; }
+
+identifier (lhs) ::= IDENTIFIER (tok) .
+{
+    // Take ownership of pointer from scan token
+    lhs = tok.name_; tok.name_ = nullptr;
+}
+
 /*---------------------------------------------------------------------------*\
  * Productions (scalar)
 \*---------------------------------------------------------------------------*/
 
-svalue (lhs) ::= NUMBER (a) .       { lhs = (a)->svalue; }  // From scanToken
+%type svalue { Foam::scalar }
+
+svalue (lhs) ::= NUMBER (tok) .     { lhs = (tok).scalarValue; } // scanToken
 svalue (lhs) ::= ZERO .             { lhs = Foam::Zero; }
 svalue (lhs) ::= PI LPAREN RPAREN . { lhs = Foam::constant::mathematical::pi; }
 svalue (lhs) ::= DEG_TO_RAD LPAREN RPAREN . { lhs = Foam::degToRad(); }
@@ -123,6 +137,31 @@ svalue (lhs) ::= ARG LPAREN RPAREN .  { lhs = driver->argValue(); }
 svalue (lhs) ::= TIME LPAREN RPAREN . { lhs = driver->timeValue(); }
 svalue (lhs) ::= DELTA_T LPAREN RPAREN . { lhs = driver->deltaT(); }
 
+svalue (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = 0;
+}
+
+/*---------------------------------------------------------------------------*\
+ * Productions (vector)
+\*---------------------------------------------------------------------------*/
+
+%type vvalue { Foam::vector* }
+%destructor vvalue { delete($$); $$ = nullptr; }
+
+vvalue (lhs) ::= VECTOR_VALUE (tok) .
+{
+    // Take ownership of pointer from scan token
+    lhs = tok.vectorPtr; tok.vectorPtr = nullptr;
+}
+
+vvalue (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = new Foam::vector(0,0,0);
+}
+
 
 /* * * * * * * * * * * * * * * * * Face Fields * * * * * * * * * * * * * * * *\
 dnl
@@ -138,7 +177,9 @@ dnl
 /*---------------------------------------------------------------------------*\
  * Productions (scalarField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [sfield])dnl
+define([_new_target_],  [_new_sfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -156,9 +197,9 @@ rules_scalar_operations()
 rules_scalar_functions()
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but works directly for scalarField
 rule_binary_func(_target_, _target_, _target_, HYPOT, Foam::hypot)
@@ -174,20 +215,30 @@ _target_ (lhs) ::= RAND LPAREN RPAREN.
 _target_ (lhs) ::= RAND LPAREN NUMBER (seed) RPAREN.
 {
     // Call with -ve seed to signal use of time index as seed
-    lhs = driver->field_rand(std::round(-(seed)->svalue)).ptr();
+    lhs = driver->field_rand(std::round(-(seed).scalarValue)).ptr();
+}
+
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
 }
 
 
 /*---------------------------------------------------------------------------*\
  * Productions (vectorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [vfield])dnl
+define([_new_target_],  [_new_vfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a); }
 
+rule_field_from_value(_target_, vvalue)
 rule_get_field(_target_, VECTOR_ID)
 rule_get_field(_target_, SVECTOR_ID)
 rule_get_patchfields(_target_, _value_type_, VECTOR_ID)
@@ -197,11 +248,22 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+// Other functions
+
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 
 /*---------------------------------------------------------------------------*\
  * Productions (sphericalTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [hfield])dnl
+define([_new_target_],  [_new_hfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -221,7 +283,9 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (symmTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [yfield])dnl
+define([_new_target_],  [_new_yfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -241,7 +305,9 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (tensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [tfield])dnl
+define([_new_target_],  [_new_tfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -303,7 +369,9 @@ dnl
 /*---------------------------------------------------------------------------*\
  * Productions (point scalarField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [psfield])dnl
+define([_new_target_],  [_new_psfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -319,24 +387,34 @@ rules_scalar_operations()
 rules_scalar_functions()
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but works directly for scalarField
 rule_binary_func(_target_, _target_, _target_, HYPOT, Foam::hypot)
 
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 
 /*---------------------------------------------------------------------------*\
  * Productions (point vectorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [pvfield])dnl
+define([_new_target_],  [_new_pvfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a, true); /* Point */ }
 
+rule_field_from_value(_target_, vvalue, POINT_EXPR)
 rule_get_field(_target_, PVECTOR_ID)
 
 rules_standard(_target_, _value_type_, _logic_)
@@ -344,10 +422,18 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 
 /*---------------------------------------------------------------------------*\
  * Productions (point sphericalTensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [phfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
@@ -366,6 +452,7 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (point symmTensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [pyfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
@@ -384,6 +471,7 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (point tensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [ptfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
@@ -544,13 +632,15 @@ void Foam::expressions::patchExpr::parser::start(parseDriver& driver_)
 }
 
 
-void Foam::expressions::patchExpr::parser::parse
-(
-    int tokenId,
-    scanToken* tokenVal
-)
+void Foam::expressions::patchExpr::parser::parse(int tokenId)
+{
+    Parse(lemon_, tokenId, scanToken::null());
+}
+
+
+void Foam::expressions::patchExpr::parser::parse(int tokenId, scanToken tok)
 {
-    Parse(lemon_, tokenId, tokenVal);
+    Parse(lemon_, tokenId, tok);
 }
 
 
diff --git a/src/finiteVolume/expressions/patch/patchExprLemonParserMacros.m4 b/src/finiteVolume/expressions/patch/patchExprLemonParserMacros.m4
index 6e77e033c05e7f6809ed5ca4c441aa82b9f5b7c8..1c7eee301a9544202f60de473650aa4d8dfb05c1 100644
--- a/src/finiteVolume/expressions/patch/patchExprLemonParserMacros.m4
+++ b/src/finiteVolume/expressions/patch/patchExprLemonParserMacros.m4
@@ -59,6 +59,27 @@ rule_driver_unary_named($1, SN_GRAD, $3, patchNormalField, $2)dnl
 
 define([rules_driver_surface_functions],
 [dnl
+_logic_ (lhs) ::= CELL_SET LPAREN identifier (name) RPAREN .dnl
+{dnl
+    driver->reportFatal("Not implemented: " + make_obj(name));
+    lhs = nullptr;dnl
+}dnl
+_logic_ (lhs) ::= CELL_ZONE LPAREN identifier (name) RPAREN .dnl
+{dnl
+    driver->reportFatal("Not implemented: " + make_obj(name));
+    lhs = nullptr;dnl
+}dnl
+_logic_ (lhs) ::= FACE_SET LPAREN identifier (name) RPAREN .dnl
+{dnl
+    driver->reportFatal("Not implemented: " + make_obj(name));
+    lhs = nullptr;dnl
+}dnl
+_logic_ (lhs) ::= FACE_ZONE LPAREN identifier (name) RPAREN .dnl
+{dnl
+    driver->reportFatal("Not implemented: " + make_obj(name));
+    lhs = nullptr;dnl
+}dnl
+dnl
 rule_driver_nullary(_scalar_, FACE_AREA, field_faceArea)dnl
 rule_driver_nullary(_vector_, POS, field_faceCentre)dnl  FACE_CENTRE
 rule_driver_nullary(_vector_, FACE_EXPR, field_areaNormal)dnl
diff --git a/src/finiteVolume/expressions/patch/patchExprParser.H b/src/finiteVolume/expressions/patch/patchExprParser.H
index 45d4adfbdf93dd017c462152d4d3412a3736c5ca..1a160230c73d906c43b4c858013100cee99ccdab 100644
--- a/src/finiteVolume/expressions/patch/patchExprParser.H
+++ b/src/finiteVolume/expressions/patch/patchExprParser.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,6 +34,7 @@ Description
 #ifndef expressions_patchExprParser_H
 #define expressions_patchExprParser_H
 
+#include "exprScanToken.H"
 #include "patchExprFwd.H"
 
 namespace Foam
@@ -97,8 +98,11 @@ public:
         //- Stop parsing, freeing the allocated parser
         void stop();
 
-        //- Push token/value to parser
-        void parse(int tokenId, scanToken* tokenVal);
+        //- Push token type to parser with default token
+        void parse(int tokenId);
+
+        //- Push token type/value to parser
+        void parse(int tokenId, scanToken tok);
 };
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteVolume/expressions/patch/patchExprScanner.H b/src/finiteVolume/expressions/patch/patchExprScanner.H
index aa991d419462d32b163b57fb18262a16086efd37..d2dfbdf13996adbe556f5322eb07ac13a5a3dab7 100644
--- a/src/finiteVolume/expressions/patch/patchExprScanner.H
+++ b/src/finiteVolume/expressions/patch/patchExprScanner.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -37,8 +37,8 @@ Note
 #ifndef expressions_patchExprScanner_H
 #define expressions_patchExprScanner_H
 
+#include "exprScanToken.H"
 #include "patchExprFwd.H"
-#include "scalar.H"
 
 namespace Foam
 {
@@ -47,21 +47,6 @@ namespace expressions
 namespace patchExpr
 {
 
-/*---------------------------------------------------------------------------*\
-                          Class scanToken Declaration
-\*---------------------------------------------------------------------------*/
-
-union scanToken
-{
-    Foam::label  ivalue;
-    Foam::scalar svalue;
-    Foam::word*  name;
-
-    //- Default construct, bit-wise zero for union content
-    scanToken() : ivalue(0) {}
-};
-
-
 /*---------------------------------------------------------------------------*\
                          Class scanner Declaration
 \*---------------------------------------------------------------------------*/
@@ -83,16 +68,14 @@ class scanner
         bool dispatch_method
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
         //- Dispatch identifier to parser (if possible) or Fatal
         bool dispatch_ident
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
 
diff --git a/src/finiteVolume/expressions/patch/patchExprScanner.cc b/src/finiteVolume/expressions/patch/patchExprScanner.cc
index 4507003dcfe6180e6143b1376792fdee5bf5bfee..6b6c37a860133ed720645d2c33f964807f9c8a46 100644
--- a/src/finiteVolume/expressions/patch/patchExprScanner.cc
+++ b/src/finiteVolume/expressions/patch/patchExprScanner.cc
@@ -30,6 +30,7 @@ Description
 
 \*---------------------------------------------------------------------------*/
 
+#include "exprScanToken.H"
 #include "patchExprScanner.H"
 #include "patchExprDriver.H"
 #include "patchExprLemonParser.h"
@@ -44,7 +45,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -57,9 +57,21 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
 #undef HAS_LOOKBEHIND_TOKENS
+#ifdef HAS_LOOKBEHIND_TOKENS
+// Special handling for these known (stashed) look-back types
+static const Enum<int> lookBehindTokenEnums
+({
+    TOKEN_PAIR("cellZone", CELL_ZONE), TOKEN_PAIR("cellSet", CELL_SET),
+    TOKEN_PAIR("faceZone", FACE_ZONE), TOKEN_PAIR("faceSet", FACE_SET),
+    #ifdef TOK_POINT_ZONE
+    TOKEN_PAIR("pointZone", POINT_ZONE), TOKEN_PAIR("pointSet", POINT_SET),
+    #endif
+});
+#endif
+
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
 static const Enum<int> fieldMethodEnums
@@ -178,7 +190,7 @@ static int driverTokenType
     const word& ident
 )
 {
-#if 0
+    #if 0
     // Get stashed "look-behind" to decide what type of identifier we expect
     const int lookBehind = driver_.resetStashedTokenId();
 
@@ -188,12 +200,17 @@ static int driverTokenType
 
         switch (lookBehind)
         {
-            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
-            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
-            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
             case TOK_CELL_ZONE : good = driver_.isCellZone(ident); break;
+            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
+
             case TOK_FACE_ZONE : good = driver_.isFaceZone(ident); break;
+            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
+
+            #ifdef TOK_POINT_ZONE
+            // Not yet ready or particularly useful it seems
             case TOK_POINT_ZONE : good = driver_.isPointZone(ident); break;
+            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
+            #endif
         }
 
         if (good)
@@ -209,51 +226,49 @@ static int driverTokenType
 
         return -2;  // Extra safety
     }
-#endif
+    #endif
 
     // Face variables
     #ifdef TOK_SSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false))                           \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false))                 \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SSCALAR_ID, scalar);
-        checkFieldToken(TOK_SVECTOR_ID, vector);
-        checkFieldToken(TOK_SSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_STENSOR_ID, tensor);
-
-        // Not tested: checkFieldToken(TOK_SBOOL_ID, bool);
+        doLocalCode(TOK_SSCALAR_ID, scalar);
+        doLocalCode(TOK_SVECTOR_ID, vector);
+        doLocalCode(TOK_SSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_STENSOR_ID, tensor);
+        // Untested: doLocalCode(TOK_SBOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
     // Point variables
     #ifdef TOK_PSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, true))                            \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, true))                  \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_PSCALAR_ID, scalar);
-        checkFieldToken(TOK_PVECTOR_ID, vector);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
-        checkFieldToken(TOK_PSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_PSPH_TENSOR_ID, sphericalTensor);
-
-        // Not tested: checkFieldToken(TOK_PBOOL_ID, bool);
+        doLocalCode(TOK_PSCALAR_ID, scalar);
+        doLocalCode(TOK_PVECTOR_ID, vector);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_PSPH_TENSOR_ID, sphericalTensor);
+        // Untested: doLocalCode(TOK_SBOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
-    #undef checkFieldToken
-
     // Check registered fields and/or disk-files
     {
         const word fieldType(driver_.getFieldClassName(ident));
@@ -269,7 +284,7 @@ static int driverTokenType
     return -1;
 }
 
-} // End anonymous namespace
+} // End namespace Foam
 
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -282,20 +297,28 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
 
-#line 291 "patchExprScanner.cc"
-static const int patchExpr_start = 11;
-static const int patchExpr_first_final = 11;
+#line 314 "patchExprScanner.cc"
+static const int patchExpr_start = 13;
+static const int patchExpr_first_final = 13;
 static const int patchExpr_error = 0;
 
-static const int patchExpr_en_main = 11;
+static const int patchExpr_en_main = 13;
 
 
-#line 436 "patchExprScanner.rl"
+#line 466 "patchExprScanner.rl"
 
 
 
@@ -315,8 +338,7 @@ Foam::expressions::patchExpr::scanner::~scanner()
 bool Foam::expressions::patchExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -333,8 +355,8 @@ bool Foam::expressions::patchExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -347,10 +369,11 @@ bool Foam::expressions::patchExpr::scanner::dispatch_method
 bool Foam::expressions::patchExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -375,12 +398,12 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -390,17 +413,28 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -408,8 +442,9 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -441,12 +476,13 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -509,9 +545,6 @@ bool Foam::expressions::patchExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -527,7 +560,7 @@ bool Foam::expressions::patchExpr::scanner::process
 
     // Initialize FSM variables
     
-#line 531 "patchExprScanner.cc"
+#line 564 "patchExprScanner.cc"
 	{
 	cs = patchExpr_start;
 	ts = 0;
@@ -535,44 +568,49 @@ bool Foam::expressions::patchExpr::scanner::process
 	act = 0;
 	}
 
-#line 666 "patchExprScanner.rl"
+#line 706 "patchExprScanner.rl"
    /* ^^^ FSM initialization here ^^^ */;
 
     
-#line 543 "patchExprScanner.cc"
+#line 576 "patchExprScanner.cc"
 	{
 	if ( p == pe )
 		goto _test_eof;
 	switch ( cs )
 	{
 tr2:
-#line 313 "patchExprScanner.rl"
+#line 339 "patchExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr4:
-#line 313 "patchExprScanner.rl"
+#line 339 "patchExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr5:
-#line 291 "patchExprScanner.rl"
+#line 314 "patchExprScanner.rl"
 	{{p = ((te))-1;}{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -584,103 +622,122 @@ tr5:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr8:
-#line 356 "patchExprScanner.rl"
+#line 383 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(EQUAL); }}
-	goto st11;
+	goto st13;
 tr9:
-#line 415 "patchExprScanner.rl"
+#line 442 "patchExprScanner.rl"
 	{{p = ((te))-1;}{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
+	goto st13;
 tr11:
-#line 423 "patchExprScanner.rl"
+#line 453 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(IDENTITY_TENSOR); }}
-	goto st11;
+	goto st13;
 tr12:
-#line 359 "patchExprScanner.rl"
-	{te = p+1;{ EMIT_TOKEN(LOR); }}
-	goto st11;
+#line 441 "patchExprScanner.rl"
+	{{p = ((te))-1;}{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+tr14:
+#line 450 "patchExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(1,0,0); }}
+	goto st13;
+tr15:
+#line 451 "patchExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,1,0); }}
+	goto st13;
 tr16:
-#line 341 "patchExprScanner.rl"
+#line 452 "patchExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,0,1); }}
+	goto st13;
+tr17:
+#line 386 "patchExprScanner.rl"
+	{te = p+1;{ EMIT_TOKEN(LOR); }}
+	goto st13;
+tr21:
+#line 368 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PERCENT); }}
-	goto st11;
-tr19:
-#line 342 "patchExprScanner.rl"
+	goto st13;
+tr24:
+#line 369 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LPAREN); }}
-	goto st11;
-tr20:
-#line 343 "patchExprScanner.rl"
+	goto st13;
+tr25:
+#line 370 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(RPAREN); }}
-	goto st11;
-tr21:
-#line 344 "patchExprScanner.rl"
+	goto st13;
+tr26:
+#line 371 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(TIMES); }}
-	goto st11;
-tr22:
-#line 345 "patchExprScanner.rl"
+	goto st13;
+tr27:
+#line 372 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PLUS); }}
-	goto st11;
-tr23:
-#line 347 "patchExprScanner.rl"
+	goto st13;
+tr28:
+#line 374 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COMMA); }}
-	goto st11;
-tr24:
-#line 346 "patchExprScanner.rl"
+	goto st13;
+tr29:
+#line 373 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(MINUS); }}
-	goto st11;
-tr26:
-#line 349 "patchExprScanner.rl"
+	goto st13;
+tr31:
+#line 376 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(DIVIDE); }}
-	goto st11;
-tr28:
-#line 351 "patchExprScanner.rl"
+	goto st13;
+tr33:
+#line 378 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COLON); }}
-	goto st11;
-tr32:
-#line 350 "patchExprScanner.rl"
+	goto st13;
+tr37:
+#line 377 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(QUESTION); }}
-	goto st11;
-tr35:
-#line 362 "patchExprScanner.rl"
+	goto st13;
+tr40:
+#line 389 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(BIT_XOR); }}
-	goto st11;
-tr53:
-#line 335 "patchExprScanner.rl"
+	goto st13;
+tr58:
+#line 362 "patchExprScanner.rl"
 	{te = p;p--;}
-	goto st11;
-tr54:
-#line 340 "patchExprScanner.rl"
-	{te = p;p--;{ EMIT_TOKEN(NOT); }}
-	goto st11;
-tr55:
-#line 357 "patchExprScanner.rl"
+	goto st13;
+tr59:
+#line 367 "patchExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(LNOT); }}
+	goto st13;
+tr60:
+#line 384 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(NOT_EQUAL); }}
-	goto st11;
-tr56:
-#line 360 "patchExprScanner.rl"
+	goto st13;
+tr61:
+#line 387 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(BIT_AND); }}
-	goto st11;
-tr57:
-#line 358 "patchExprScanner.rl"
+	goto st13;
+tr62:
+#line 385 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LAND); }}
-	goto st11;
-tr58:
-#line 348 "patchExprScanner.rl"
+	goto st13;
+tr63:
+#line 375 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(DOT); }}
-	goto st11;
-tr61:
-#line 291 "patchExprScanner.rl"
+	goto st13;
+tr66:
+#line 314 "patchExprScanner.rl"
 	{te = p;p--;{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -692,41 +749,42 @@ tr61:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr63:
-#line 319 "patchExprScanner.rl"
+	goto st13;
+tr68:
+#line 346 "patchExprScanner.rl"
 	{te = p;p--;{
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr64:
-#line 352 "patchExprScanner.rl"
+	goto st13;
+tr69:
+#line 379 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LESS); }}
-	goto st11;
-tr65:
-#line 353 "patchExprScanner.rl"
+	goto st13;
+tr70:
+#line 380 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LESS_EQ); }}
-	goto st11;
-tr66:
-#line 354 "patchExprScanner.rl"
+	goto st13;
+tr71:
+#line 381 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(GREATER); }}
-	goto st11;
-tr67:
-#line 355 "patchExprScanner.rl"
+	goto st13;
+tr72:
+#line 382 "patchExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(GREATER_EQ); }}
-	goto st11;
-tr68:
-#line 313 "patchExprScanner.rl"
+	goto st13;
+tr73:
+#line 339 "patchExprScanner.rl"
 	{te = p;p--;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr70:
+	goto st13;
+tr75:
 #line 1 "NONE"
 	{	switch( act ) {
 	case 26:
@@ -816,9 +874,6 @@ tr70:
 	case 63:
 	{{p = ((te))-1;} EMIT_TOKEN(BOOL); }
 	break;
-	case 64:
-	{{p = ((te))-1;} EMIT_TOKEN(VECTOR); }
-	break;
 	case 66:
 	{{p = ((te))-1;} EMIT_TOKEN(SYM_TENSOR); }
 	break;
@@ -826,154 +881,159 @@ tr70:
 	{{p = ((te))-1;} EMIT_TOKEN(SPH_TENSOR); }
 	break;
 	case 68:
-	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
+	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
 	break;
 	case 69:
-	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
+	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
 	break;
 	case 70:
-	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
+	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
 	break;
-	case 72:
+	case 75:
 	{{p = ((te))-1;} EMIT_TOKEN(ARG); }
 	break;
-	case 73:
+	case 76:
 	{{p = ((te))-1;} EMIT_TOKEN(TIME); }
 	break;
-	case 74:
+	case 77:
 	{{p = ((te))-1;} EMIT_TOKEN(DELTA_T); }
 	break;
-	case 75:
+	case 78:
 	{{p = ((te))-1;}
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 	break;
 	}
 	}
-	goto st11;
-tr86:
-#line 384 "patchExprScanner.rl"
+	goto st13;
+tr91:
+#line 411 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(ATAN); }}
-	goto st11;
-tr101:
-#line 380 "patchExprScanner.rl"
+	goto st13;
+tr106:
+#line 407 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(COS); }}
-	goto st11;
-tr134:
-#line 373 "patchExprScanner.rl"
+	goto st13;
+tr139:
+#line 400 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LOG); }}
-	goto st11;
-tr141:
-#line 389 "patchExprScanner.rl"
+	goto st13;
+tr146:
+#line 416 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(MAG); }}
-	goto st11;
-tr149:
-#line 393 "patchExprScanner.rl"
+	goto st13;
+tr154:
+#line 420 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(NEG); }}
-	goto st11;
-tr166:
-#line 392 "patchExprScanner.rl"
+	goto st13;
+tr171:
+#line 419 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(POS); }}
-	goto st11;
-tr186:
-#line 379 "patchExprScanner.rl"
+	goto st13;
+tr191:
+#line 406 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SIN); }}
-	goto st11;
-tr206:
-#line 376 "patchExprScanner.rl"
+	goto st13;
+tr211:
+#line 403 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SQR); }}
-	goto st11;
-tr222:
-#line 381 "patchExprScanner.rl"
+	goto st13;
+tr227:
+#line 408 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TAN); }}
-	goto st11;
-tr228:
-#line 415 "patchExprScanner.rl"
+	goto st13;
+tr233:
+#line 442 "patchExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
-st11:
+	goto st13;
+tr244:
+#line 441 "patchExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+st13:
 #line 1 "NONE"
 	{ts = 0;}
 	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
+		goto _test_eof13;
+case 13:
 #line 1 "NONE"
 	{ts = p;}
-#line 905 "patchExprScanner.cc"
+#line 965 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 32: goto st12;
-		case 33: goto st13;
+		case 32: goto st14;
+		case 33: goto st15;
 		case 34: goto st1;
-		case 37: goto tr16;
-		case 38: goto st14;
+		case 37: goto tr21;
+		case 38: goto st16;
 		case 39: goto st3;
-		case 40: goto tr19;
-		case 41: goto tr20;
-		case 42: goto tr21;
-		case 43: goto tr22;
-		case 44: goto tr23;
-		case 45: goto tr24;
-		case 46: goto st15;
-		case 47: goto tr26;
-		case 58: goto tr28;
-		case 60: goto st20;
+		case 40: goto tr24;
+		case 41: goto tr25;
+		case 42: goto tr26;
+		case 43: goto tr27;
+		case 44: goto tr28;
+		case 45: goto tr29;
+		case 46: goto st17;
+		case 47: goto tr31;
+		case 58: goto tr33;
+		case 60: goto st22;
 		case 61: goto st7;
-		case 62: goto st21;
-		case 63: goto tr32;
-		case 90: goto st24;
-		case 94: goto tr35;
-		case 95: goto st22;
-		case 97: goto st27;
-		case 98: goto st41;
-		case 99: goto st44;
-		case 100: goto st49;
-		case 101: goto st59;
-		case 102: goto st61;
-		case 105: goto st65;
-		case 108: goto st77;
-		case 109: goto st81;
-		case 110: goto st87;
-		case 112: goto st101;
-		case 114: goto st104;
-		case 115: goto st112;
-		case 116: goto st144;
-		case 118: goto st156;
-		case 119: goto st161;
-		case 124: goto st10;
+		case 62: goto st23;
+		case 63: goto tr37;
+		case 90: goto st26;
+		case 94: goto tr40;
+		case 95: goto st24;
+		case 97: goto st29;
+		case 98: goto st43;
+		case 99: goto st46;
+		case 100: goto st51;
+		case 101: goto st61;
+		case 102: goto st63;
+		case 105: goto st67;
+		case 108: goto st79;
+		case 109: goto st83;
+		case 110: goto st89;
+		case 112: goto st103;
+		case 114: goto st106;
+		case 115: goto st114;
+		case 116: goto st146;
+		case 118: goto st158;
+		case 119: goto st164;
+		case 124: goto st12;
 	}
 	if ( (*p) < 48 ) {
 		if ( 9 <= (*p) && (*p) <= 13 )
-			goto st12;
+			goto st14;
 	} else if ( (*p) > 57 ) {
 		if ( (*p) > 89 ) {
 			if ( 103 <= (*p) && (*p) <= 122 )
-				goto st22;
+				goto st24;
 		} else if ( (*p) >= 65 )
-			goto st22;
+			goto st24;
 	} else
-		goto tr27;
+		goto tr32;
 	goto st0;
 st0:
 cs = 0;
 	goto _out;
-st12:
+st14:
 	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
+		goto _test_eof14;
+case 14:
 	if ( (*p) == 32 )
-		goto st12;
+		goto st14;
 	if ( 9 <= (*p) && (*p) <= 13 )
-		goto st12;
-	goto tr53;
-st13:
+		goto st14;
+	goto tr58;
+st15:
 	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
+		goto _test_eof15;
+case 15:
 	if ( (*p) == 61 )
-		goto tr55;
-	goto tr54;
+		goto tr60;
+	goto tr59;
 st1:
 	if ( ++p == pe )
 		goto _test_eof1;
@@ -988,13 +1048,13 @@ case 2:
 	if ( (*p) == 34 )
 		goto tr2;
 	goto st2;
-st14:
+st16:
 	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
+		goto _test_eof16;
+case 16:
 	if ( (*p) == 38 )
-		goto tr57;
-	goto tr56;
+		goto tr62;
+	goto tr61;
 st3:
 	if ( ++p == pe )
 		goto _test_eof3;
@@ -1009,35 +1069,35 @@ case 4:
 	if ( (*p) == 39 )
 		goto tr4;
 	goto st4;
-st15:
+st17:
 	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
+		goto _test_eof17;
+case 17:
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr59;
+			goto tr64;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else
-		goto st18;
-	goto tr58;
-tr59:
+		goto st20;
+	goto tr63;
+tr64:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st16;
-st16:
+	goto st18;
+st18:
 	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-#line 1034 "patchExprScanner.cc"
+		goto _test_eof18;
+case 18:
+#line 1094 "patchExprScanner.cc"
 	switch( (*p) ) {
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr59;
-	goto tr61;
+		goto tr64;
+	goto tr66;
 st5:
 	if ( ++p == pe )
 		goto _test_eof5;
@@ -1047,56 +1107,56 @@ case 5:
 		case 45: goto st6;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
 st6:
 	if ( ++p == pe )
 		goto _test_eof6;
 case 6:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
-st17:
+st19:
 	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
+		goto _test_eof19;
+case 19:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
-	goto tr61;
-st18:
+		goto st19;
+	goto tr66;
+st20:
 	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
+		goto _test_eof20;
+case 20:
 	if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else if ( (*p) >= 65 )
-		goto st18;
-	goto tr63;
-tr27:
+		goto st20;
+	goto tr68;
+tr32:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st19;
-st19:
+	goto st21;
+st21:
 	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-#line 1085 "patchExprScanner.cc"
+		goto _test_eof21;
+case 21:
+#line 1145 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr59;
+		case 46: goto tr64;
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr27;
-	goto tr61;
-st20:
+		goto tr32;
+	goto tr66;
+st22:
 	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
+		goto _test_eof22;
+case 22:
 	if ( (*p) == 61 )
-		goto tr65;
-	goto tr64;
+		goto tr70;
+	goto tr69;
 st7:
 	if ( ++p == pe )
 		goto _test_eof7;
@@ -1104,3068 +1164,3100 @@ case 7:
 	if ( (*p) == 61 )
 		goto tr8;
 	goto st0;
-st21:
+st23:
 	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
+		goto _test_eof23;
+case 23:
 	if ( (*p) == 61 )
-		goto tr67;
-	goto tr66;
-st22:
+		goto tr72;
+	goto tr71;
+st24:
 	if ( ++p == pe )
-		goto _test_eof22;
-case 22:
+		goto _test_eof24;
+case 24:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
-tr69:
+		goto tr74;
+	goto tr73;
+tr74:
 #line 1 "NONE"
 	{te = p+1;}
-#line 313 "patchExprScanner.rl"
-	{act = 75;}
-	goto st23;
-tr73:
+#line 339 "patchExprScanner.rl"
+	{act = 78;}
+	goto st25;
+tr78:
 #line 1 "NONE"
 	{te = p+1;}
-#line 420 "patchExprScanner.rl"
-	{act = 68;}
-	goto st23;
-tr80:
+#line 449 "patchExprScanner.rl"
+	{act = 70;}
+	goto st25;
+tr85:
 #line 1 "NONE"
 	{te = p+1;}
-#line 383 "patchExprScanner.rl"
+#line 410 "patchExprScanner.rl"
 	{act = 40;}
-	goto st23;
-tr81:
+	goto st25;
+tr86:
 #line 1 "NONE"
 	{te = p+1;}
-#line 424 "patchExprScanner.rl"
-	{act = 72;}
-	goto st23;
-tr83:
+#line 454 "patchExprScanner.rl"
+	{act = 75;}
+	goto st25;
+tr88:
 #line 1 "NONE"
 	{te = p+1;}
-#line 382 "patchExprScanner.rl"
+#line 409 "patchExprScanner.rl"
 	{act = 39;}
-	goto st23;
-tr87:
+	goto st25;
+tr92:
 #line 1 "NONE"
 	{te = p+1;}
-#line 385 "patchExprScanner.rl"
+#line 412 "patchExprScanner.rl"
 	{act = 42;}
-	goto st23;
-tr92:
+	goto st25;
+tr97:
 #line 1 "NONE"
 	{te = p+1;}
-#line 401 "patchExprScanner.rl"
+#line 428 "patchExprScanner.rl"
 	{act = 55;}
-	goto st23;
-tr95:
+	goto st25;
+tr100:
 #line 1 "NONE"
 	{te = p+1;}
-#line 413 "patchExprScanner.rl"
+#line 440 "patchExprScanner.rl"
 	{act = 63;}
-	goto st23;
-tr99:
+	goto st25;
+tr104:
 #line 1 "NONE"
 	{te = p+1;}
-#line 378 "patchExprScanner.rl"
+#line 405 "patchExprScanner.rl"
 	{act = 35;}
-	goto st23;
-tr102:
+	goto st25;
+tr107:
 #line 1 "NONE"
 	{te = p+1;}
-#line 387 "patchExprScanner.rl"
+#line 414 "patchExprScanner.rl"
 	{act = 44;}
-	goto st23;
-tr110:
+	goto st25;
+tr115:
 #line 1 "NONE"
 	{te = p+1;}
-#line 370 "patchExprScanner.rl"
+#line 397 "patchExprScanner.rl"
 	{act = 27;}
-	goto st23;
-tr113:
+	goto st25;
+tr118:
 #line 1 "NONE"
 	{te = p+1;}
-#line 426 "patchExprScanner.rl"
-	{act = 74;}
-	goto st23;
-tr115:
+#line 456 "patchExprScanner.rl"
+	{act = 77;}
+	goto st25;
+tr120:
 #line 1 "NONE"
 	{te = p+1;}
-#line 372 "patchExprScanner.rl"
+#line 399 "patchExprScanner.rl"
 	{act = 29;}
-	goto st23;
-tr119:
+	goto st25;
+tr124:
 #line 1 "NONE"
 	{te = p+1;}
-#line 422 "patchExprScanner.rl"
-	{act = 70;}
-	goto st23;
-tr131:
+#line 448 "patchExprScanner.rl"
+	{act = 69;}
+	goto st25;
+tr136:
 #line 1 "NONE"
 	{te = p+1;}
-#line 409 "patchExprScanner.rl"
+#line 436 "patchExprScanner.rl"
 	{act = 61;}
-	goto st23;
-tr136:
+	goto st25;
+tr141:
 #line 1 "NONE"
 	{te = p+1;}
-#line 374 "patchExprScanner.rl"
+#line 401 "patchExprScanner.rl"
 	{act = 31;}
-	goto st23;
-tr140:
+	goto st25;
+tr145:
 #line 1 "NONE"
 	{te = p+1;}
-#line 400 "patchExprScanner.rl"
+#line 427 "patchExprScanner.rl"
 	{act = 54;}
-	goto st23;
-tr144:
+	goto st25;
+tr149:
 #line 1 "NONE"
 	{te = p+1;}
-#line 390 "patchExprScanner.rl"
+#line 417 "patchExprScanner.rl"
 	{act = 47;}
-	goto st23;
-tr145:
+	goto st25;
+tr150:
 #line 1 "NONE"
 	{te = p+1;}
-#line 399 "patchExprScanner.rl"
+#line 426 "patchExprScanner.rl"
 	{act = 53;}
-	goto st23;
-tr150:
+	goto st25;
+tr155:
 #line 1 "NONE"
 	{te = p+1;}
-#line 395 "patchExprScanner.rl"
+#line 422 "patchExprScanner.rl"
 	{act = 51;}
-	goto st23;
-tr161:
+	goto st25;
+tr166:
 #line 1 "NONE"
 	{te = p+1;}
-#line 410 "patchExprScanner.rl"
+#line 437 "patchExprScanner.rl"
 	{act = 62;}
-	goto st23;
-tr162:
+	goto st25;
+tr167:
 #line 1 "NONE"
 	{te = p+1;}
-#line 369 "patchExprScanner.rl"
+#line 396 "patchExprScanner.rl"
 	{act = 26;}
-	goto st23;
-tr165:
+	goto st25;
+tr170:
 #line 1 "NONE"
 	{te = p+1;}
-#line 375 "patchExprScanner.rl"
+#line 402 "patchExprScanner.rl"
 	{act = 32;}
-	goto st23;
-tr167:
+	goto st25;
+tr172:
 #line 1 "NONE"
 	{te = p+1;}
-#line 394 "patchExprScanner.rl"
+#line 421 "patchExprScanner.rl"
 	{act = 50;}
-	goto st23;
-tr175:
+	goto st25;
+tr180:
 #line 1 "NONE"
 	{te = p+1;}
-#line 371 "patchExprScanner.rl"
+#line 398 "patchExprScanner.rl"
 	{act = 28;}
-	goto st23;
-tr176:
+	goto st25;
+tr181:
 #line 1 "NONE"
 	{te = p+1;}
-#line 405 "patchExprScanner.rl"
+#line 432 "patchExprScanner.rl"
 	{act = 59;}
-	goto st23;
-tr185:
+	goto st25;
+tr190:
 #line 1 "NONE"
 	{te = p+1;}
-#line 396 "patchExprScanner.rl"
+#line 423 "patchExprScanner.rl"
 	{act = 52;}
-	goto st23;
-tr187:
+	goto st25;
+tr192:
 #line 1 "NONE"
 	{te = p+1;}
-#line 386 "patchExprScanner.rl"
+#line 413 "patchExprScanner.rl"
 	{act = 43;}
-	goto st23;
-tr191:
+	goto st25;
+tr196:
 #line 1 "NONE"
 	{te = p+1;}
-#line 408 "patchExprScanner.rl"
+#line 435 "patchExprScanner.rl"
 	{act = 60;}
-	goto st23;
-tr204:
+	goto st25;
+tr209:
 #line 1 "NONE"
 	{te = p+1;}
-#line 417 "patchExprScanner.rl"
+#line 444 "patchExprScanner.rl"
 	{act = 67;}
-	goto st23;
-tr207:
+	goto st25;
+tr212:
 #line 1 "NONE"
 	{te = p+1;}
-#line 377 "patchExprScanner.rl"
+#line 404 "patchExprScanner.rl"
 	{act = 34;}
-	goto st23;
-tr208:
+	goto st25;
+tr213:
 #line 1 "NONE"
 	{te = p+1;}
-#line 402 "patchExprScanner.rl"
+#line 429 "patchExprScanner.rl"
 	{act = 56;}
-	goto st23;
-tr216:
+	goto st25;
+tr221:
 #line 1 "NONE"
 	{te = p+1;}
-#line 416 "patchExprScanner.rl"
+#line 443 "patchExprScanner.rl"
 	{act = 66;}
-	goto st23;
-tr223:
+	goto st25;
+tr228:
 #line 1 "NONE"
 	{te = p+1;}
-#line 388 "patchExprScanner.rl"
+#line 415 "patchExprScanner.rl"
 	{act = 45;}
-	goto st23;
-tr231:
-#line 1 "NONE"
-	{te = p+1;}
-#line 425 "patchExprScanner.rl"
-	{act = 73;}
-	goto st23;
-tr233:
+	goto st25;
+tr236:
 #line 1 "NONE"
 	{te = p+1;}
-#line 421 "patchExprScanner.rl"
-	{act = 69;}
-	goto st23;
+#line 455 "patchExprScanner.rl"
+	{act = 76;}
+	goto st25;
 tr238:
 #line 1 "NONE"
 	{te = p+1;}
-#line 414 "patchExprScanner.rl"
-	{act = 64;}
-	goto st23;
-tr251:
+#line 447 "patchExprScanner.rl"
+	{act = 68;}
+	goto st25;
+tr258:
 #line 1 "NONE"
 	{te = p+1;}
-#line 403 "patchExprScanner.rl"
+#line 430 "patchExprScanner.rl"
 	{act = 57;}
-	goto st23;
-tr253:
+	goto st25;
+tr260:
 #line 1 "NONE"
 	{te = p+1;}
-#line 404 "patchExprScanner.rl"
+#line 431 "patchExprScanner.rl"
 	{act = 58;}
-	goto st23;
-st23:
-	if ( ++p == pe )
-		goto _test_eof23;
-case 23:
-#line 1370 "patchExprScanner.cc"
-	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
-	} else
-		goto tr69;
-	goto tr70;
-st24:
-	if ( ++p == pe )
-		goto _test_eof24;
-case 24:
-	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st25;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
-	} else
-		goto tr69;
-	goto tr68;
+	goto st25;
 st25:
 	if ( ++p == pe )
 		goto _test_eof25;
 case 25:
+#line 1424 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st26;
+		case 46: goto tr74;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr75;
 st26:
 	if ( ++p == pe )
 		goto _test_eof26;
 case 26:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto tr73;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st27;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st27:
 	if ( ++p == pe )
 		goto _test_eof27;
 case 27:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 99: goto st28;
-		case 114: goto st30;
-		case 115: goto st31;
-		case 116: goto st33;
-		case 118: goto st36;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st28;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st28:
 	if ( ++p == pe )
 		goto _test_eof28;
 case 28:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st29;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto tr78;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st29:
 	if ( ++p == pe )
 		goto _test_eof29;
 case 29:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto tr80;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 99: goto st30;
+		case 114: goto st32;
+		case 115: goto st33;
+		case 116: goto st35;
+		case 118: goto st38;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st30:
 	if ( ++p == pe )
 		goto _test_eof30;
 case 30:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto tr81;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st31;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st31:
 	if ( ++p == pe )
 		goto _test_eof31;
 case 31:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st32;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto tr85;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st32:
 	if ( ++p == pe )
 		goto _test_eof32;
 case 32:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto tr83;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto tr86;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st33:
 	if ( ++p == pe )
 		goto _test_eof33;
 case 33:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st34;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st34;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st34:
 	if ( ++p == pe )
 		goto _test_eof34;
 case 34:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st35;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto tr88;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st35:
 	if ( ++p == pe )
 		goto _test_eof35;
 case 35:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 50: goto tr87;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st36;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr86;
+		goto tr74;
+	goto tr73;
 st36:
 	if ( ++p == pe )
 		goto _test_eof36;
 case 36:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st37;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st37;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st37:
 	if ( ++p == pe )
 		goto _test_eof37;
 case 37:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st38;
+		case 46: goto tr74;
+		case 50: goto tr92;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr91;
 st38:
 	if ( ++p == pe )
 		goto _test_eof38;
 case 38:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st39;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st39;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st39:
 	if ( ++p == pe )
 		goto _test_eof39;
 case 39:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st40;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st40;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st40:
 	if ( ++p == pe )
 		goto _test_eof40;
 case 40:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto tr92;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st41;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st41:
 	if ( ++p == pe )
 		goto _test_eof41;
 case 41:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st42;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st42;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st42:
 	if ( ++p == pe )
 		goto _test_eof42;
 case 42:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st43;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto tr97;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st43:
 	if ( ++p == pe )
 		goto _test_eof43;
 case 43:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto tr95;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st44;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st44:
 	if ( ++p == pe )
 		goto _test_eof44;
 case 44:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 98: goto st45;
-		case 111: goto st47;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st45;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st45:
 	if ( ++p == pe )
 		goto _test_eof45;
 case 45:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st46;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto tr100;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st46:
 	if ( ++p == pe )
 		goto _test_eof46;
 case 46:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto tr99;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 98: goto st47;
+		case 111: goto st49;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st47:
 	if ( ++p == pe )
 		goto _test_eof47;
 case 47:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st48;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st48;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st48:
 	if ( ++p == pe )
 		goto _test_eof48;
 case 48:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto tr102;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto tr104;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr101;
+		goto tr74;
+	goto tr73;
 st49:
 	if ( ++p == pe )
 		goto _test_eof49;
 case 49:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st50;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st50;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st50:
 	if ( ++p == pe )
 		goto _test_eof50;
 case 50:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st51;
-		case 108: goto st56;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto tr107;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr106;
 st51:
 	if ( ++p == pe )
 		goto _test_eof51;
 case 51:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 84: goto st52;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st52;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st52:
 	if ( ++p == pe )
 		goto _test_eof52;
 case 52:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st53;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st53;
+		case 108: goto st58;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st53:
 	if ( ++p == pe )
 		goto _test_eof53;
 case 53:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 82: goto st54;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 84: goto st54;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st54:
 	if ( ++p == pe )
 		goto _test_eof54;
 case 54:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st55;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st55;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st55:
 	if ( ++p == pe )
 		goto _test_eof55;
 case 55:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto tr110;
+		case 46: goto tr74;
+		case 82: goto st56;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st56:
 	if ( ++p == pe )
 		goto _test_eof56;
 case 56:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto st57;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st57;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st57:
 	if ( ++p == pe )
 		goto _test_eof57;
 case 57:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st58;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto tr115;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st58:
 	if ( ++p == pe )
 		goto _test_eof58;
 case 58:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 84: goto tr113;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto st59;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st59:
 	if ( ++p == pe )
 		goto _test_eof59;
 case 59:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 120: goto st60;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st60;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st60:
 	if ( ++p == pe )
 		goto _test_eof60;
 case 60:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 112: goto tr115;
+		case 46: goto tr74;
+		case 84: goto tr118;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st61:
 	if ( ++p == pe )
 		goto _test_eof61;
 case 61:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st62;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 120: goto st62;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st62:
 	if ( ++p == pe )
 		goto _test_eof62;
 case 62:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto st63;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 112: goto tr120;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st63:
 	if ( ++p == pe )
 		goto _test_eof63;
 case 63:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st64;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st64;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st64:
 	if ( ++p == pe )
 		goto _test_eof64;
 case 64:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto tr119;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto st65;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st65:
 	if ( ++p == pe )
 		goto _test_eof65;
 case 65:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st66;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st66;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st66:
 	if ( ++p == pe )
 		goto _test_eof66;
 case 66:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto st67;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto tr124;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st67:
 	if ( ++p == pe )
 		goto _test_eof67;
 case 67:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st68;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st68;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st68:
 	if ( ++p == pe )
 		goto _test_eof68;
 case 68:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto st69;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st69:
 	if ( ++p == pe )
 		goto _test_eof69;
 case 69:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st70;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st70;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st70:
 	if ( ++p == pe )
 		goto _test_eof70;
 case 70:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st71;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st71;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st71:
 	if ( ++p == pe )
 		goto _test_eof71;
 case 71:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto st72;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st72;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st72:
 	if ( ++p == pe )
 		goto _test_eof72;
 case 72:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 70: goto st73;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st73:
 	if ( ++p == pe )
 		goto _test_eof73;
 case 73:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st74;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto st74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st74:
 	if ( ++p == pe )
 		goto _test_eof74;
 case 74:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st75;
+		case 46: goto tr74;
+		case 70: goto st75;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st75:
 	if ( ++p == pe )
 		goto _test_eof75;
 case 75:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto st76;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st76;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st76:
 	if ( ++p == pe )
 		goto _test_eof76;
 case 76:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto tr131;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st77;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st77:
 	if ( ++p == pe )
 		goto _test_eof77;
 case 77:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st78;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto st78;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st78:
 	if ( ++p == pe )
 		goto _test_eof78;
 case 78:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st79;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto tr136;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st79:
 	if ( ++p == pe )
 		goto _test_eof79;
 case 79:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 49: goto st80;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st80;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr134;
+		goto tr74;
+	goto tr73;
 st80:
 	if ( ++p == pe )
 		goto _test_eof80;
 case 80:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 48: goto tr136;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st81;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st81:
 	if ( ++p == pe )
 		goto _test_eof81;
 case 81:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st82;
-		case 105: goto st86;
+		case 46: goto tr74;
+		case 49: goto st82;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr139;
 st82:
 	if ( ++p == pe )
 		goto _test_eof82;
 case 82:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st83;
-		case 120: goto tr140;
+		case 46: goto tr74;
+		case 48: goto tr141;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st83:
 	if ( ++p == pe )
 		goto _test_eof83;
 case 83:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 83: goto st84;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st84;
+		case 105: goto st88;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr141;
+		goto tr74;
+	goto tr73;
 st84:
 	if ( ++p == pe )
 		goto _test_eof84;
 case 84:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 113: goto st85;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st85;
+		case 120: goto tr145;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st85:
 	if ( ++p == pe )
 		goto _test_eof85;
 case 85:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto tr144;
+		case 46: goto tr74;
+		case 83: goto st86;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr146;
 st86:
 	if ( ++p == pe )
 		goto _test_eof86;
 case 86:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto tr145;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 113: goto st87;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st87:
 	if ( ++p == pe )
 		goto _test_eof87;
 case 87:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st88;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto tr149;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st88:
 	if ( ++p == pe )
 		goto _test_eof88;
 case 88:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st89;
-		case 105: goto st90;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto tr150;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st89:
 	if ( ++p == pe )
 		goto _test_eof89;
 case 89:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 48: goto tr150;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st90;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr149;
+		goto tr74;
+	goto tr73;
 st90:
 	if ( ++p == pe )
 		goto _test_eof90;
 case 90:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
 		case 103: goto st91;
+		case 105: goto st92;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st91:
 	if ( ++p == pe )
 		goto _test_eof91;
 case 91:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto st92;
+		case 46: goto tr74;
+		case 48: goto tr155;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr154;
 st92:
 	if ( ++p == pe )
 		goto _test_eof92;
 case 92:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 98: goto st93;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st93;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st93:
 	if ( ++p == pe )
 		goto _test_eof93;
 case 93:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st94;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto st94;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st94:
 	if ( ++p == pe )
 		goto _test_eof94;
 case 94:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 117: goto st95;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 98: goto st95;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st95:
 	if ( ++p == pe )
 		goto _test_eof95;
 case 95:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st96;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st96;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st96:
 	if ( ++p == pe )
 		goto _test_eof96;
 case 96:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 70: goto st97;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 117: goto st97;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st97:
 	if ( ++p == pe )
 		goto _test_eof97;
 case 97:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st98;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st98;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st98:
 	if ( ++p == pe )
 		goto _test_eof98;
 case 98:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st99;
+		case 46: goto tr74;
+		case 70: goto st99;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st99:
 	if ( ++p == pe )
 		goto _test_eof99;
 case 99:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto st100;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st100;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st100:
 	if ( ++p == pe )
 		goto _test_eof100;
 case 100:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto tr161;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st101;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st101:
 	if ( ++p == pe )
 		goto _test_eof101;
 case 101:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto tr162;
-		case 111: goto st102;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto st102;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st102:
 	if ( ++p == pe )
 		goto _test_eof102;
 case 102:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st103;
-		case 119: goto tr165;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto tr166;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st103:
 	if ( ++p == pe )
 		goto _test_eof103;
 case 103:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 48: goto tr167;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto tr167;
+		case 111: goto st104;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr166;
+		goto tr74;
+	goto tr73;
 st104:
 	if ( ++p == pe )
 		goto _test_eof104;
 case 104:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st105;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st105;
+		case 119: goto tr170;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st105:
 	if ( ++p == pe )
 		goto _test_eof105;
 case 105:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto st106;
-		case 110: goto st111;
+		case 46: goto tr74;
+		case 48: goto tr172;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr171;
 st106:
 	if ( ++p == pe )
 		goto _test_eof106;
 case 106:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 84: goto st107;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st107;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st107:
 	if ( ++p == pe )
 		goto _test_eof107;
 case 107:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st108;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto st108;
+		case 110: goto st113;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st108:
 	if ( ++p == pe )
 		goto _test_eof108;
 case 108:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 68: goto st109;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 84: goto st109;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st109:
 	if ( ++p == pe )
 		goto _test_eof109;
 case 109:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st110;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st110;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st110:
 	if ( ++p == pe )
 		goto _test_eof110;
 case 110:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto tr175;
+		case 46: goto tr74;
+		case 68: goto st111;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st111:
 	if ( ++p == pe )
 		goto _test_eof111;
 case 111:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto tr176;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st112;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st112:
 	if ( ++p == pe )
 		goto _test_eof112;
 case 112:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st113;
-		case 110: goto st116;
-		case 112: goto st120;
-		case 113: goto st133;
-		case 117: goto st135;
-		case 121: goto st136;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto tr180;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st113:
 	if ( ++p == pe )
 		goto _test_eof113;
 case 113:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st114;
-		case 110: goto st115;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto tr181;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st114:
 	if ( ++p == pe )
 		goto _test_eof114;
 case 114:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto tr185;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st115;
+		case 110: goto st118;
+		case 112: goto st122;
+		case 113: goto st135;
+		case 117: goto st137;
+		case 121: goto st138;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st115:
 	if ( ++p == pe )
 		goto _test_eof115;
 case 115:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto tr187;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st116;
+		case 110: goto st117;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr186;
+		goto tr74;
+	goto tr73;
 st116:
 	if ( ++p == pe )
 		goto _test_eof116;
 case 116:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 71: goto st117;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto tr190;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st117:
 	if ( ++p == pe )
 		goto _test_eof117;
 case 117:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st118;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto tr192;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr191;
 st118:
 	if ( ++p == pe )
 		goto _test_eof118;
 case 118:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st119;
+		case 46: goto tr74;
+		case 71: goto st119;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st119:
 	if ( ++p == pe )
 		goto _test_eof119;
 case 119:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 100: goto tr191;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st120;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st120:
 	if ( ++p == pe )
 		goto _test_eof120;
 case 120:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto st121;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st121;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st121:
 	if ( ++p == pe )
 		goto _test_eof121;
 case 121:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st122;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 100: goto tr196;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st122:
 	if ( ++p == pe )
 		goto _test_eof122;
 case 122:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st123;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto st123;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st123:
 	if ( ++p == pe )
 		goto _test_eof123;
 case 123:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st124;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st124;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st124:
 	if ( ++p == pe )
 		goto _test_eof124;
 case 124:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 99: goto st125;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st125;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st125:
 	if ( ++p == pe )
 		goto _test_eof125;
 case 125:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st126;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st126;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st126:
 	if ( ++p == pe )
 		goto _test_eof126;
 case 126:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 108: goto st127;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 99: goto st127;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st127:
 	if ( ++p == pe )
 		goto _test_eof127;
 case 127:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 84: goto st128;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st128;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st128:
 	if ( ++p == pe )
 		goto _test_eof128;
 case 128:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st129;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 108: goto st129;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st129:
 	if ( ++p == pe )
 		goto _test_eof129;
 case 129:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st130;
+		case 46: goto tr74;
+		case 84: goto st130;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st130:
 	if ( ++p == pe )
 		goto _test_eof130;
 case 130:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st131;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st131;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st131:
 	if ( ++p == pe )
 		goto _test_eof131;
 case 131:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st132;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st132;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st132:
 	if ( ++p == pe )
 		goto _test_eof132;
 case 132:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto tr204;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st133;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st133:
 	if ( ++p == pe )
 		goto _test_eof133;
 case 133:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st134;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st134;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st134:
 	if ( ++p == pe )
 		goto _test_eof134;
 case 134:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto tr207;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto tr209;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr206;
+		goto tr74;
+	goto tr73;
 st135:
 	if ( ++p == pe )
 		goto _test_eof135;
 case 135:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 109: goto tr208;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st136;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st136:
 	if ( ++p == pe )
 		goto _test_eof136;
 case 136:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 109: goto st137;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto tr212;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr211;
 st137:
 	if ( ++p == pe )
 		goto _test_eof137;
 case 137:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 109: goto st138;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 109: goto tr213;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st138:
 	if ( ++p == pe )
 		goto _test_eof138;
 case 138:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 84: goto st139;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 109: goto st139;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st139:
 	if ( ++p == pe )
 		goto _test_eof139;
 case 139:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st140;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 109: goto st140;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st140:
 	if ( ++p == pe )
 		goto _test_eof140;
 case 140:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st141;
+		case 46: goto tr74;
+		case 84: goto st141;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st141:
 	if ( ++p == pe )
 		goto _test_eof141;
 case 141:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st142;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st142;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st142:
 	if ( ++p == pe )
 		goto _test_eof142;
 case 142:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st143;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st143;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st143:
 	if ( ++p == pe )
 		goto _test_eof143;
 case 143:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto tr216;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st144;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st144:
 	if ( ++p == pe )
 		goto _test_eof144;
 case 144:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st145;
-		case 101: goto st147;
-		case 105: goto st152;
-		case 114: goto st154;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st145;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st145:
 	if ( ++p == pe )
 		goto _test_eof145;
 case 145:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 110: goto st146;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto tr221;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st146:
 	if ( ++p == pe )
 		goto _test_eof146;
 case 146:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto tr223;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st147;
+		case 101: goto st149;
+		case 105: goto st154;
+		case 114: goto st156;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr222;
+		goto tr74;
+	goto tr73;
 st147:
 	if ( ++p == pe )
 		goto _test_eof147;
 case 147:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
 		case 110: goto st148;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st148:
 	if ( ++p == pe )
 		goto _test_eof148;
 case 148:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 115: goto st149;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto tr228;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr227;
 st149:
 	if ( ++p == pe )
 		goto _test_eof149;
 case 149:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st150;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 110: goto st150;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st150:
 	if ( ++p == pe )
 		goto _test_eof150;
 case 150:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto tr227;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 115: goto st151;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
-tr227:
-#line 1 "NONE"
-	{te = p+1;}
-	goto st151;
+		goto tr74;
+	goto tr73;
 st151:
 	if ( ++p == pe )
 		goto _test_eof151;
 case 151:
-#line 3699 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 58: goto st8;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st152;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr228;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 58 )
-		goto st9;
-	goto tr9;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 73 )
-		goto tr11;
-	goto tr9;
+		goto tr74;
+	goto tr73;
 st152:
 	if ( ++p == pe )
 		goto _test_eof152;
 case 152:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 109: goto st153;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto tr232;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
+tr232:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st153;
 st153:
 	if ( ++p == pe )
 		goto _test_eof153;
 case 153:
+#line 3753 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto tr231;
+		case 46: goto tr74;
+		case 58: goto st8;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr233;
+st8:
+	if ( ++p == pe )
+		goto _test_eof8;
+case 8:
+	if ( (*p) == 58 )
+		goto st9;
+	goto tr9;
+st9:
+	if ( ++p == pe )
+		goto _test_eof9;
+case 9:
+	if ( (*p) == 73 )
+		goto tr11;
+	goto tr9;
 st154:
 	if ( ++p == pe )
 		goto _test_eof154;
 case 154:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 117: goto st155;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 109: goto st155;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st155:
 	if ( ++p == pe )
 		goto _test_eof155;
 case 155:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto tr233;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto tr236;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st156:
 	if ( ++p == pe )
 		goto _test_eof156;
 case 156:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st157;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 117: goto st157;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st157:
 	if ( ++p == pe )
 		goto _test_eof157;
 case 157:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 99: goto st158;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto tr238;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st158:
 	if ( ++p == pe )
 		goto _test_eof158;
 case 158:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto st159;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st159;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st159:
 	if ( ++p == pe )
 		goto _test_eof159;
 case 159:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 111: goto st160;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 99: goto st160;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st160:
 	if ( ++p == pe )
 		goto _test_eof160;
 case 160:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto tr238;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto st161;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st161:
 	if ( ++p == pe )
 		goto _test_eof161;
 case 161:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st162;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 111: goto st162;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st162:
 	if ( ++p == pe )
 		goto _test_eof162;
 case 162:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 105: goto st163;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto tr243;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
+tr243:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st163;
 st163:
 	if ( ++p == pe )
 		goto _test_eof163;
 case 163:
+#line 3952 "patchExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st164;
+		case 46: goto tr74;
+		case 58: goto st10;
+		case 95: goto tr74;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr244;
+st10:
+	if ( ++p == pe )
+		goto _test_eof10;
+case 10:
+	if ( (*p) == 58 )
+		goto st11;
+	goto tr12;
+st11:
+	if ( ++p == pe )
+		goto _test_eof11;
+case 11:
+	switch( (*p) ) {
+		case 120: goto tr14;
+		case 121: goto tr15;
+		case 122: goto tr16;
+	}
+	goto tr12;
 st164:
 	if ( ++p == pe )
 		goto _test_eof164;
 case 164:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 104: goto st165;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st165;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st165:
 	if ( ++p == pe )
 		goto _test_eof165;
 case 165:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 116: goto st166;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 105: goto st166;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st166:
 	if ( ++p == pe )
 		goto _test_eof166;
 case 166:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 65: goto st167;
-		case 83: goto st173;
-		case 95: goto tr69;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st167;
 	}
-	if ( (*p) < 66 ) {
+	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st167:
 	if ( ++p == pe )
 		goto _test_eof167;
 case 167:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 118: goto st168;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 104: goto st168;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st168:
 	if ( ++p == pe )
 		goto _test_eof168;
 case 168:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto st169;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 116: goto st169;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st169:
 	if ( ++p == pe )
 		goto _test_eof169;
 case 169:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 114: goto st170;
+		case 46: goto tr74;
+		case 65: goto st170;
+		case 83: goto st176;
+		case 95: goto tr74;
 	}
-	if ( (*p) < 65 ) {
+	if ( (*p) < 66 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st170:
 	if ( ++p == pe )
 		goto _test_eof170;
 case 170:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 97: goto st171;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 118: goto st171;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st171:
 	if ( ++p == pe )
 		goto _test_eof171;
 case 171:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 103: goto st172;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto st172;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st172:
 	if ( ++p == pe )
 		goto _test_eof172;
 case 172:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 101: goto tr251;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 114: goto st173;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st173:
 	if ( ++p == pe )
 		goto _test_eof173;
 case 173:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 117: goto st174;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 97: goto st174;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
+		goto tr74;
+	goto tr73;
 st174:
 	if ( ++p == pe )
 		goto _test_eof174;
 case 174:
 	switch( (*p) ) {
-		case 46: goto tr69;
-		case 95: goto tr69;
-		case 109: goto tr253;
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 103: goto st175;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr69;
+			goto tr74;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr69;
+			goto tr74;
 	} else
-		goto tr69;
-	goto tr68;
-st10:
+		goto tr74;
+	goto tr73;
+st175:
 	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
+		goto _test_eof175;
+case 175:
+	switch( (*p) ) {
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 101: goto tr258;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
+	} else
+		goto tr74;
+	goto tr73;
+st176:
+	if ( ++p == pe )
+		goto _test_eof176;
+case 176:
+	switch( (*p) ) {
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 117: goto st177;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
+	} else
+		goto tr74;
+	goto tr73;
+st177:
+	if ( ++p == pe )
+		goto _test_eof177;
+case 177:
+	switch( (*p) ) {
+		case 46: goto tr74;
+		case 95: goto tr74;
+		case 109: goto tr260;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr74;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr74;
+	} else
+		goto tr74;
+	goto tr73;
+st12:
+	if ( ++p == pe )
+		goto _test_eof12;
+case 12:
 	if ( (*p) == 124 )
-		goto tr12;
+		goto tr17;
 	goto st0;
 	}
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
 	_test_eof13: cs = 13; goto _test_eof; 
+	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof15: cs = 15; goto _test_eof; 
 	_test_eof1: cs = 1; goto _test_eof; 
 	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof16: cs = 16; goto _test_eof; 
 	_test_eof3: cs = 3; goto _test_eof; 
 	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof17: cs = 17; goto _test_eof; 
 	_test_eof18: cs = 18; goto _test_eof; 
+	_test_eof5: cs = 5; goto _test_eof; 
+	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof19: cs = 19; goto _test_eof; 
 	_test_eof20: cs = 20; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof21: cs = 21; goto _test_eof; 
 	_test_eof22: cs = 22; goto _test_eof; 
+	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof23: cs = 23; goto _test_eof; 
 	_test_eof24: cs = 24; goto _test_eof; 
 	_test_eof25: cs = 25; goto _test_eof; 
@@ -4295,10 +4387,10 @@ case 10:
 	_test_eof149: cs = 149; goto _test_eof; 
 	_test_eof150: cs = 150; goto _test_eof; 
 	_test_eof151: cs = 151; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof152: cs = 152; goto _test_eof; 
 	_test_eof153: cs = 153; goto _test_eof; 
+	_test_eof8: cs = 8; goto _test_eof; 
+	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof154: cs = 154; goto _test_eof; 
 	_test_eof155: cs = 155; goto _test_eof; 
 	_test_eof156: cs = 156; goto _test_eof; 
@@ -4309,6 +4401,8 @@ case 10:
 	_test_eof161: cs = 161; goto _test_eof; 
 	_test_eof162: cs = 162; goto _test_eof; 
 	_test_eof163: cs = 163; goto _test_eof; 
+	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof11: cs = 11; goto _test_eof; 
 	_test_eof164: cs = 164; goto _test_eof; 
 	_test_eof165: cs = 165; goto _test_eof; 
 	_test_eof166: cs = 166; goto _test_eof; 
@@ -4320,186 +4414,192 @@ case 10:
 	_test_eof172: cs = 172; goto _test_eof; 
 	_test_eof173: cs = 173; goto _test_eof; 
 	_test_eof174: cs = 174; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof175: cs = 175; goto _test_eof; 
+	_test_eof176: cs = 176; goto _test_eof; 
+	_test_eof177: cs = 177; goto _test_eof; 
+	_test_eof12: cs = 12; goto _test_eof; 
 
 	_test_eof: {}
 	if ( p == eof )
 	{
 	switch ( cs ) {
-	case 12: goto tr53;
-	case 13: goto tr54;
-	case 14: goto tr56;
-	case 15: goto tr58;
+	case 14: goto tr58;
+	case 15: goto tr59;
 	case 16: goto tr61;
+	case 17: goto tr63;
+	case 18: goto tr66;
 	case 5: goto tr5;
 	case 6: goto tr5;
-	case 17: goto tr61;
-	case 18: goto tr63;
-	case 19: goto tr61;
-	case 20: goto tr64;
+	case 19: goto tr66;
+	case 20: goto tr68;
 	case 21: goto tr66;
-	case 22: goto tr68;
-	case 23: goto tr70;
-	case 24: goto tr68;
-	case 25: goto tr68;
-	case 26: goto tr68;
-	case 27: goto tr68;
-	case 28: goto tr68;
-	case 29: goto tr68;
-	case 30: goto tr68;
-	case 31: goto tr68;
-	case 32: goto tr68;
-	case 33: goto tr68;
-	case 34: goto tr68;
-	case 35: goto tr86;
-	case 36: goto tr68;
-	case 37: goto tr68;
-	case 38: goto tr68;
-	case 39: goto tr68;
-	case 40: goto tr68;
-	case 41: goto tr68;
-	case 42: goto tr68;
-	case 43: goto tr68;
-	case 44: goto tr68;
-	case 45: goto tr68;
-	case 46: goto tr68;
-	case 47: goto tr68;
-	case 48: goto tr101;
-	case 49: goto tr68;
-	case 50: goto tr68;
-	case 51: goto tr68;
-	case 52: goto tr68;
-	case 53: goto tr68;
-	case 54: goto tr68;
-	case 55: goto tr68;
-	case 56: goto tr68;
-	case 57: goto tr68;
-	case 58: goto tr68;
-	case 59: goto tr68;
-	case 60: goto tr68;
-	case 61: goto tr68;
-	case 62: goto tr68;
-	case 63: goto tr68;
-	case 64: goto tr68;
-	case 65: goto tr68;
-	case 66: goto tr68;
-	case 67: goto tr68;
-	case 68: goto tr68;
-	case 69: goto tr68;
-	case 70: goto tr68;
-	case 71: goto tr68;
-	case 72: goto tr68;
-	case 73: goto tr68;
-	case 74: goto tr68;
-	case 75: goto tr68;
-	case 76: goto tr68;
-	case 77: goto tr68;
-	case 78: goto tr68;
-	case 79: goto tr134;
-	case 80: goto tr68;
-	case 81: goto tr68;
-	case 82: goto tr68;
-	case 83: goto tr141;
-	case 84: goto tr68;
-	case 85: goto tr68;
-	case 86: goto tr68;
-	case 87: goto tr68;
-	case 88: goto tr68;
-	case 89: goto tr149;
-	case 90: goto tr68;
-	case 91: goto tr68;
-	case 92: goto tr68;
-	case 93: goto tr68;
-	case 94: goto tr68;
-	case 95: goto tr68;
-	case 96: goto tr68;
-	case 97: goto tr68;
-	case 98: goto tr68;
-	case 99: goto tr68;
-	case 100: goto tr68;
-	case 101: goto tr68;
-	case 102: goto tr68;
-	case 103: goto tr166;
-	case 104: goto tr68;
-	case 105: goto tr68;
-	case 106: goto tr68;
-	case 107: goto tr68;
-	case 108: goto tr68;
-	case 109: goto tr68;
-	case 110: goto tr68;
-	case 111: goto tr68;
-	case 112: goto tr68;
-	case 113: goto tr68;
-	case 114: goto tr68;
-	case 115: goto tr186;
-	case 116: goto tr68;
-	case 117: goto tr68;
-	case 118: goto tr68;
-	case 119: goto tr68;
-	case 120: goto tr68;
-	case 121: goto tr68;
-	case 122: goto tr68;
-	case 123: goto tr68;
-	case 124: goto tr68;
-	case 125: goto tr68;
-	case 126: goto tr68;
-	case 127: goto tr68;
-	case 128: goto tr68;
-	case 129: goto tr68;
-	case 130: goto tr68;
-	case 131: goto tr68;
-	case 132: goto tr68;
-	case 133: goto tr68;
-	case 134: goto tr206;
-	case 135: goto tr68;
-	case 136: goto tr68;
-	case 137: goto tr68;
-	case 138: goto tr68;
-	case 139: goto tr68;
-	case 140: goto tr68;
-	case 141: goto tr68;
-	case 142: goto tr68;
-	case 143: goto tr68;
-	case 144: goto tr68;
-	case 145: goto tr68;
-	case 146: goto tr222;
-	case 147: goto tr68;
-	case 148: goto tr68;
-	case 149: goto tr68;
-	case 150: goto tr68;
-	case 151: goto tr228;
+	case 22: goto tr69;
+	case 23: goto tr71;
+	case 24: goto tr73;
+	case 25: goto tr75;
+	case 26: goto tr73;
+	case 27: goto tr73;
+	case 28: goto tr73;
+	case 29: goto tr73;
+	case 30: goto tr73;
+	case 31: goto tr73;
+	case 32: goto tr73;
+	case 33: goto tr73;
+	case 34: goto tr73;
+	case 35: goto tr73;
+	case 36: goto tr73;
+	case 37: goto tr91;
+	case 38: goto tr73;
+	case 39: goto tr73;
+	case 40: goto tr73;
+	case 41: goto tr73;
+	case 42: goto tr73;
+	case 43: goto tr73;
+	case 44: goto tr73;
+	case 45: goto tr73;
+	case 46: goto tr73;
+	case 47: goto tr73;
+	case 48: goto tr73;
+	case 49: goto tr73;
+	case 50: goto tr106;
+	case 51: goto tr73;
+	case 52: goto tr73;
+	case 53: goto tr73;
+	case 54: goto tr73;
+	case 55: goto tr73;
+	case 56: goto tr73;
+	case 57: goto tr73;
+	case 58: goto tr73;
+	case 59: goto tr73;
+	case 60: goto tr73;
+	case 61: goto tr73;
+	case 62: goto tr73;
+	case 63: goto tr73;
+	case 64: goto tr73;
+	case 65: goto tr73;
+	case 66: goto tr73;
+	case 67: goto tr73;
+	case 68: goto tr73;
+	case 69: goto tr73;
+	case 70: goto tr73;
+	case 71: goto tr73;
+	case 72: goto tr73;
+	case 73: goto tr73;
+	case 74: goto tr73;
+	case 75: goto tr73;
+	case 76: goto tr73;
+	case 77: goto tr73;
+	case 78: goto tr73;
+	case 79: goto tr73;
+	case 80: goto tr73;
+	case 81: goto tr139;
+	case 82: goto tr73;
+	case 83: goto tr73;
+	case 84: goto tr73;
+	case 85: goto tr146;
+	case 86: goto tr73;
+	case 87: goto tr73;
+	case 88: goto tr73;
+	case 89: goto tr73;
+	case 90: goto tr73;
+	case 91: goto tr154;
+	case 92: goto tr73;
+	case 93: goto tr73;
+	case 94: goto tr73;
+	case 95: goto tr73;
+	case 96: goto tr73;
+	case 97: goto tr73;
+	case 98: goto tr73;
+	case 99: goto tr73;
+	case 100: goto tr73;
+	case 101: goto tr73;
+	case 102: goto tr73;
+	case 103: goto tr73;
+	case 104: goto tr73;
+	case 105: goto tr171;
+	case 106: goto tr73;
+	case 107: goto tr73;
+	case 108: goto tr73;
+	case 109: goto tr73;
+	case 110: goto tr73;
+	case 111: goto tr73;
+	case 112: goto tr73;
+	case 113: goto tr73;
+	case 114: goto tr73;
+	case 115: goto tr73;
+	case 116: goto tr73;
+	case 117: goto tr191;
+	case 118: goto tr73;
+	case 119: goto tr73;
+	case 120: goto tr73;
+	case 121: goto tr73;
+	case 122: goto tr73;
+	case 123: goto tr73;
+	case 124: goto tr73;
+	case 125: goto tr73;
+	case 126: goto tr73;
+	case 127: goto tr73;
+	case 128: goto tr73;
+	case 129: goto tr73;
+	case 130: goto tr73;
+	case 131: goto tr73;
+	case 132: goto tr73;
+	case 133: goto tr73;
+	case 134: goto tr73;
+	case 135: goto tr73;
+	case 136: goto tr211;
+	case 137: goto tr73;
+	case 138: goto tr73;
+	case 139: goto tr73;
+	case 140: goto tr73;
+	case 141: goto tr73;
+	case 142: goto tr73;
+	case 143: goto tr73;
+	case 144: goto tr73;
+	case 145: goto tr73;
+	case 146: goto tr73;
+	case 147: goto tr73;
+	case 148: goto tr227;
+	case 149: goto tr73;
+	case 150: goto tr73;
+	case 151: goto tr73;
+	case 152: goto tr73;
+	case 153: goto tr233;
 	case 8: goto tr9;
 	case 9: goto tr9;
-	case 152: goto tr68;
-	case 153: goto tr68;
-	case 154: goto tr68;
-	case 155: goto tr68;
-	case 156: goto tr68;
-	case 157: goto tr68;
-	case 158: goto tr68;
-	case 159: goto tr68;
-	case 160: goto tr68;
-	case 161: goto tr68;
-	case 162: goto tr68;
-	case 163: goto tr68;
-	case 164: goto tr68;
-	case 165: goto tr68;
-	case 166: goto tr68;
-	case 167: goto tr68;
-	case 168: goto tr68;
-	case 169: goto tr68;
-	case 170: goto tr68;
-	case 171: goto tr68;
-	case 172: goto tr68;
-	case 173: goto tr68;
-	case 174: goto tr68;
+	case 154: goto tr73;
+	case 155: goto tr73;
+	case 156: goto tr73;
+	case 157: goto tr73;
+	case 158: goto tr73;
+	case 159: goto tr73;
+	case 160: goto tr73;
+	case 161: goto tr73;
+	case 162: goto tr73;
+	case 163: goto tr244;
+	case 10: goto tr12;
+	case 11: goto tr12;
+	case 164: goto tr73;
+	case 165: goto tr73;
+	case 166: goto tr73;
+	case 167: goto tr73;
+	case 168: goto tr73;
+	case 169: goto tr73;
+	case 170: goto tr73;
+	case 171: goto tr73;
+	case 172: goto tr73;
+	case 173: goto tr73;
+	case 174: goto tr73;
+	case 175: goto tr73;
+	case 176: goto tr73;
+	case 177: goto tr73;
 	}
 	}
 
 	_out: {}
 	}
 
-#line 668 "patchExprScanner.rl"
+#line 708 "patchExprScanner.rl"
    /* ^^^ FSM execution here ^^^ */;
 
     if (0 == cs)
@@ -4513,7 +4613,7 @@ case 10:
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)
diff --git a/src/finiteVolume/expressions/patch/patchExprScanner.rl b/src/finiteVolume/expressions/patch/patchExprScanner.rl
index a56f7d3edb67ec9b2cb225ca1b329e3a117ee683..4ba56036212c21c4e32a043649bcfeaf8ee31b02 100644
--- a/src/finiteVolume/expressions/patch/patchExprScanner.rl
+++ b/src/finiteVolume/expressions/patch/patchExprScanner.rl
@@ -28,6 +28,7 @@ Description
 
 \*---------------------------------------------------------------------------*/
 
+#include "exprScanToken.H"
 #include "patchExprScanner.H"
 #include "patchExprDriver.H"
 #include "patchExprLemonParser.h"
@@ -42,7 +43,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -55,9 +55,21 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
 #undef HAS_LOOKBEHIND_TOKENS
+#ifdef HAS_LOOKBEHIND_TOKENS
+// Special handling for these known (stashed) look-back types
+static const Enum<int> lookBehindTokenEnums
+({
+    TOKEN_PAIR("cellZone", CELL_ZONE), TOKEN_PAIR("cellSet", CELL_SET),
+    TOKEN_PAIR("faceZone", FACE_ZONE), TOKEN_PAIR("faceSet", FACE_SET),
+    #ifdef TOK_POINT_ZONE
+    TOKEN_PAIR("pointZone", POINT_ZONE), TOKEN_PAIR("pointSet", POINT_SET),
+    #endif
+});
+#endif
+
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
 static const Enum<int> fieldMethodEnums
@@ -176,7 +188,7 @@ static int driverTokenType
     const word& ident
 )
 {
-#if 0
+    #if 0
     // Get stashed "look-behind" to decide what type of identifier we expect
     const int lookBehind = driver_.resetStashedTokenId();
 
@@ -186,12 +198,17 @@ static int driverTokenType
 
         switch (lookBehind)
         {
-            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
-            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
-            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
             case TOK_CELL_ZONE : good = driver_.isCellZone(ident); break;
+            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
+
             case TOK_FACE_ZONE : good = driver_.isFaceZone(ident); break;
+            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
+
+            #ifdef TOK_POINT_ZONE
+            // Not yet ready or particularly useful it seems
             case TOK_POINT_ZONE : good = driver_.isPointZone(ident); break;
+            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
+            #endif
         }
 
         if (good)
@@ -207,51 +224,49 @@ static int driverTokenType
 
         return -2;  // Extra safety
     }
-#endif
+    #endif
 
     // Face variables
     #ifdef TOK_SSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false))                           \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false))                 \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SSCALAR_ID, scalar);
-        checkFieldToken(TOK_SVECTOR_ID, vector);
-        checkFieldToken(TOK_SSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_STENSOR_ID, tensor);
-
-        // Not tested: checkFieldToken(TOK_SBOOL_ID, bool);
+        doLocalCode(TOK_SSCALAR_ID, scalar);
+        doLocalCode(TOK_SVECTOR_ID, vector);
+        doLocalCode(TOK_SSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_STENSOR_ID, tensor);
+        // Untested: doLocalCode(TOK_SBOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
     // Point variables
     #ifdef TOK_PSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, true))                            \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, true))                  \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_PSCALAR_ID, scalar);
-        checkFieldToken(TOK_PVECTOR_ID, vector);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
-        checkFieldToken(TOK_PSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_PSPH_TENSOR_ID, sphericalTensor);
-
-        // Not tested: checkFieldToken(TOK_PBOOL_ID, bool);
+        doLocalCode(TOK_PSCALAR_ID, scalar);
+        doLocalCode(TOK_PVECTOR_ID, vector);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_PSPH_TENSOR_ID, sphericalTensor);
+        // Untested: doLocalCode(TOK_SBOOL_ID, bool);
+        #undef doLocalCode
     }
     #endif
 
-    #undef checkFieldToken
-
     // Check registered fields and/or disk-files
     {
         const word fieldType(driver_.getFieldClassName(ident));
@@ -267,7 +282,7 @@ static int driverTokenType
     return -1;
 }
 
-} // End anonymous namespace
+} // End namespace Foam
 
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -280,7 +295,15 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
@@ -289,15 +312,18 @@ static int driverTokenType
     write   data;
 
     action emit_number {
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -311,15 +337,16 @@ static int driverTokenType
     }
 
     action emit_ident {
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 
     action emit_method {
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }
 
@@ -337,7 +364,7 @@ static int driverTokenType
     number => emit_number;
 
     ## Operators
-    '!'  =>{ EMIT_TOKEN(NOT); };
+    '!'  =>{ EMIT_TOKEN(LNOT); };
     '%'  =>{ EMIT_TOKEN(PERCENT); };
     '('  =>{ EMIT_TOKEN(LPAREN); };
     ')'  =>{ EMIT_TOKEN(RPAREN); };
@@ -358,7 +385,7 @@ static int driverTokenType
     '&&' =>{ EMIT_TOKEN(LAND); };
     '||' =>{ EMIT_TOKEN(LOR); };
     '&'  =>{ EMIT_TOKEN(BIT_AND); };
-## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OK); };
+## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OR); };
     '^'  =>{ EMIT_TOKEN(BIT_XOR); };
 
     ## Some '.method' - Error if unknown
@@ -417,9 +444,12 @@ static int driverTokenType
     "sphericalTensor" =>{ EMIT_TOKEN(SPH_TENSOR); };
 
     ## Single value (constants, etc)
-    "Zero"      =>{ EMIT_TOKEN(ZERO); };
     "true"      =>{ EMIT_TOKEN(LTRUE); };
     "false"     =>{ EMIT_TOKEN(LFALSE); };
+    "Zero"      =>{ EMIT_TOKEN(ZERO); };
+    "vector::x" =>{ EMIT_VECTOR_TOKEN(1,0,0); };
+    "vector::y" =>{ EMIT_VECTOR_TOKEN(0,1,0); };
+    "vector::z" =>{ EMIT_VECTOR_TOKEN(0,0,1); };
     "tensor::I" =>{ EMIT_TOKEN(IDENTITY_TENSOR); };
     "arg"       =>{ EMIT_TOKEN(ARG); };
     "time"      =>{ EMIT_TOKEN(TIME); };
@@ -452,8 +482,7 @@ Foam::expressions::patchExpr::scanner::~scanner()
 bool Foam::expressions::patchExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -470,8 +499,8 @@ bool Foam::expressions::patchExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -484,10 +513,11 @@ bool Foam::expressions::patchExpr::scanner::dispatch_method
 bool Foam::expressions::patchExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -512,12 +542,12 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -527,17 +557,28 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -545,8 +586,9 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -578,12 +620,13 @@ bool Foam::expressions::patchExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -646,9 +689,6 @@ bool Foam::expressions::patchExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -678,7 +718,7 @@ bool Foam::expressions::patchExpr::scanner::process
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)
diff --git a/src/finiteVolume/expressions/volume/volumeExprFwd.H b/src/finiteVolume/expressions/volume/volumeExprFwd.H
index bff30718d10a6be74e54f0e596f8948e4e884bc6..4187dfab05806d390a02147e48fd2a33459ede9a 100644
--- a/src/finiteVolume/expressions/volume/volumeExprFwd.H
+++ b/src/finiteVolume/expressions/volume/volumeExprFwd.H
@@ -47,7 +47,6 @@ namespace volumeExpr
 class parser;
 class scanner;
 class parseDriver;
-union scanToken;
 
 //- Static debugging option
 extern int debug;
diff --git a/src/finiteVolume/expressions/volume/volumeExprLemonParser.h b/src/finiteVolume/expressions/volume/volumeExprLemonParser.h
index b24aa9a43715cc9d764aada89a336eef0533bbd0..830ea29d255008cace1ca278367b9a8470b6752e 100644
--- a/src/finiteVolume/expressions/volume/volumeExprLemonParser.h
+++ b/src/finiteVolume/expressions/volume/volumeExprLemonParser.h
@@ -1,121 +1,126 @@
-#define TOK_QUESTION                         1
-#define TOK_COLON                            2
-#define TOK_LOR                              3
-#define TOK_LAND                             4
-#define TOK_BIT_XOR                          5
-#define TOK_BIT_AND                          6
-#define TOK_EQUAL                            7
-#define TOK_NOT_EQUAL                        8
-#define TOK_LESS_EQ                          9
-#define TOK_GREATER_EQ                      10
-#define TOK_LESS                            11
-#define TOK_GREATER                         12
-#define TOK_PLUS                            13
-#define TOK_MINUS                           14
-#define TOK_TIMES                           15
-#define TOK_DIVIDE                          16
-#define TOK_PERCENT                         17
-#define TOK_NEGATE                          18
-#define TOK_NOT                             19
-#define TOK_DOT                             20
-#define TOK_NUMBER                          21
-#define TOK_ZERO                            22
-#define TOK_PI                              23
-#define TOK_LPAREN                          24
-#define TOK_RPAREN                          25
-#define TOK_DEG_TO_RAD                      26
-#define TOK_RAD_TO_DEG                      27
-#define TOK_ARG                             28
-#define TOK_TIME                            29
-#define TOK_DELTA_T                         30
-#define TOK_SCALAR_ID                       31
-#define TOK_MIN                             32
-#define TOK_COMMA                           33
-#define TOK_MAX                             34
-#define TOK_SUM                             35
-#define TOK_AVERAGE                         36
-#define TOK_EXP                             37
-#define TOK_LOG                             38
-#define TOK_LOG10                           39
-#define TOK_SQR                             40
-#define TOK_SQRT                            41
-#define TOK_CBRT                            42
-#define TOK_SIN                             43
-#define TOK_COS                             44
-#define TOK_TAN                             45
-#define TOK_ASIN                            46
-#define TOK_ACOS                            47
-#define TOK_ATAN                            48
-#define TOK_SINH                            49
-#define TOK_COSH                            50
-#define TOK_TANH                            51
-#define TOK_POW                             52
-#define TOK_ATAN2                           53
-#define TOK_POS                             54
-#define TOK_NEG                             55
-#define TOK_POS0                            56
-#define TOK_NEG0                            57
-#define TOK_SIGN                            58
-#define TOK_FLOOR                           59
-#define TOK_CEIL                            60
-#define TOK_ROUND                           61
-#define TOK_HYPOT                           62
-#define TOK_RAND                            63
-#define TOK_VECTOR_ID                       64
-#define TOK_SPH_TENSOR_ID                   65
-#define TOK_SYM_TENSOR_ID                   66
-#define TOK_IDENTITY_TENSOR                 67
-#define TOK_TENSOR_ID                       68
-#define TOK_LTRUE                           69
-#define TOK_LFALSE                          70
-#define TOK_BOOL                            71
-#define TOK_CELL_SET                        72
-#define TOK_IDENTIFIER                      73
-#define TOK_CELL_ZONE                       74
-#define TOK_CELL_VOLUME                     75
-#define TOK_WEIGHT_AVERAGE                  76
-#define TOK_WEIGHT_SUM                      77
-#define TOK_FACE_EXPR                       78
-#define TOK_SSCALAR_ID                      79
-#define TOK_SVECTOR_ID                      80
-#define TOK_SSPH_TENSOR_ID                  81
-#define TOK_SSYM_TENSOR_ID                  82
-#define TOK_STENSOR_ID                      83
-#define TOK_FACE_SET                        84
-#define TOK_FACE_ZONE                       85
-#define TOK_FACE_AREA                       86
-#define TOK_FACE_CENTRE                     87
-#define TOK_POINT_EXPR                      88
-#define TOK_PSCALAR_ID                      89
-#define TOK_PVECTOR_ID                      90
-#define TOK_PSPH_TENSOR_ID                  91
-#define TOK_PSYM_TENSOR_ID                  92
-#define TOK_PTENSOR_ID                      93
-#define TOK_POINT_SET                       94
-#define TOK_POINT_ZONE                      95
-#define TOK_POINTS                          96
-#define TOK_MAG                             97
-#define TOK_MAGSQR                          98
-#define TOK_VECTOR                          99
-#define TOK_TENSOR                         100
-#define TOK_SYM_TENSOR                     101
-#define TOK_SPH_TENSOR                     102
-#define TOK_CMPT_X                         103
-#define TOK_CMPT_Y                         104
-#define TOK_CMPT_Z                         105
-#define TOK_CMPT_XX                        106
-#define TOK_CMPT_XY                        107
-#define TOK_CMPT_XZ                        108
-#define TOK_CMPT_YX                        109
-#define TOK_CMPT_YY                        110
-#define TOK_CMPT_YZ                        111
-#define TOK_CMPT_ZX                        112
-#define TOK_CMPT_ZY                        113
-#define TOK_CMPT_ZZ                        114
-#define TOK_CMPT_II                        115
-#define TOK_TRANSPOSE                      116
-#define TOK_DIAG                           117
-#define TOK_POINT_TO_CELL                  118
-#define TOK_RECONSTRUCT                    119
-#define TOK_CELL_TO_FACE                   120
-#define TOK_CELL_TO_POINT                  121
+#define TOK_LPAREN                           1
+#define TOK_RPAREN                           2
+#define TOK_COMMA                            3
+#define TOK_QUESTION                         4
+#define TOK_COLON                            5
+#define TOK_LOR                              6
+#define TOK_LAND                             7
+#define TOK_LNOT                             8
+#define TOK_BIT_OR                           9
+#define TOK_BIT_XOR                         10
+#define TOK_BIT_AND                         11
+#define TOK_BIT_NOT                         12
+#define TOK_EQUAL                           13
+#define TOK_NOT_EQUAL                       14
+#define TOK_LESS                            15
+#define TOK_LESS_EQ                         16
+#define TOK_GREATER                         17
+#define TOK_GREATER_EQ                      18
+#define TOK_PLUS                            19
+#define TOK_MINUS                           20
+#define TOK_TIMES                           21
+#define TOK_DIVIDE                          22
+#define TOK_PERCENT                         23
+#define TOK_NEGATE                          24
+#define TOK_DOT                             25
+#define TOK_BOOL                            26
+#define TOK_LTRUE                           27
+#define TOK_LFALSE                          28
+#define TOK_NUMBER                          29
+#define TOK_ZERO                            30
+#define TOK_IDENTIFIER                      31
+#define TOK_PI                              32
+#define TOK_DEG_TO_RAD                      33
+#define TOK_RAD_TO_DEG                      34
+#define TOK_ARG                             35
+#define TOK_TIME                            36
+#define TOK_DELTA_T                         37
+#define TOK_SCALAR_FUNCTION_ID              38
+#define TOK_VECTOR_VALUE                    39
+#define TOK_VECTOR_FUNCTION_ID              40
+#define TOK_SCALAR_ID                       41
+#define TOK_MIN                             42
+#define TOK_MAX                             43
+#define TOK_SUM                             44
+#define TOK_AVERAGE                         45
+#define TOK_EXP                             46
+#define TOK_LOG                             47
+#define TOK_LOG10                           48
+#define TOK_SQR                             49
+#define TOK_SQRT                            50
+#define TOK_CBRT                            51
+#define TOK_SIN                             52
+#define TOK_COS                             53
+#define TOK_TAN                             54
+#define TOK_ASIN                            55
+#define TOK_ACOS                            56
+#define TOK_ATAN                            57
+#define TOK_SINH                            58
+#define TOK_COSH                            59
+#define TOK_TANH                            60
+#define TOK_POW                             61
+#define TOK_ATAN2                           62
+#define TOK_POS                             63
+#define TOK_NEG                             64
+#define TOK_POS0                            65
+#define TOK_NEG0                            66
+#define TOK_SIGN                            67
+#define TOK_FLOOR                           68
+#define TOK_CEIL                            69
+#define TOK_ROUND                           70
+#define TOK_HYPOT                           71
+#define TOK_RAND                            72
+#define TOK_VECTOR_ID                       73
+#define TOK_SPH_TENSOR_ID                   74
+#define TOK_SYM_TENSOR_ID                   75
+#define TOK_IDENTITY_TENSOR                 76
+#define TOK_TENSOR_ID                       77
+#define TOK_CELL_SET                        78
+#define TOK_CELL_ZONE                       79
+#define TOK_CELL_VOLUME                     80
+#define TOK_WEIGHT_AVERAGE                  81
+#define TOK_WEIGHT_SUM                      82
+#define TOK_FACE_EXPR                       83
+#define TOK_SSCALAR_ID                      84
+#define TOK_SVECTOR_ID                      85
+#define TOK_SSPH_TENSOR_ID                  86
+#define TOK_SSYM_TENSOR_ID                  87
+#define TOK_STENSOR_ID                      88
+#define TOK_FACE_SET                        89
+#define TOK_FACE_ZONE                       90
+#define TOK_FACE_AREA                       91
+#define TOK_FACE_CENTRE                     92
+#define TOK_POINT_EXPR                      93
+#define TOK_PSCALAR_ID                      94
+#define TOK_PVECTOR_ID                      95
+#define TOK_PSPH_TENSOR_ID                  96
+#define TOK_PSYM_TENSOR_ID                  97
+#define TOK_PTENSOR_ID                      98
+#define TOK_POINT_SET                       99
+#define TOK_POINT_ZONE                     100
+#define TOK_POINTS                         101
+#define TOK_MAG                            102
+#define TOK_MAGSQR                         103
+#define TOK_VECTOR                         104
+#define TOK_TENSOR                         105
+#define TOK_SYM_TENSOR                     106
+#define TOK_SPH_TENSOR                     107
+#define TOK_CMPT_X                         108
+#define TOK_CMPT_Y                         109
+#define TOK_CMPT_Z                         110
+#define TOK_CMPT_XX                        111
+#define TOK_CMPT_XY                        112
+#define TOK_CMPT_XZ                        113
+#define TOK_CMPT_YX                        114
+#define TOK_CMPT_YY                        115
+#define TOK_CMPT_YZ                        116
+#define TOK_CMPT_ZX                        117
+#define TOK_CMPT_ZY                        118
+#define TOK_CMPT_ZZ                        119
+#define TOK_CMPT_II                        120
+#define TOK_TRANSPOSE                      121
+#define TOK_DIAG                           122
+#define TOK_POINT_TO_CELL                  123
+#define TOK_RECONSTRUCT                    124
+#define TOK_CELL_TO_FACE                   125
+#define TOK_CELL_TO_POINT                  126
diff --git a/src/finiteVolume/expressions/volume/volumeExprLemonParser.lyy-m4 b/src/finiteVolume/expressions/volume/volumeExprLemonParser.lyy-m4
index 4d17ebd4cb6892b97d47d2323da73786de320aab..23ecd5e99e4e011e0b21875bfe3e9e9a61517dce 100644
--- a/src/finiteVolume/expressions/volume/volumeExprLemonParser.lyy-m4
+++ b/src/finiteVolume/expressions/volume/volumeExprLemonParser.lyy-m4
@@ -42,6 +42,7 @@ Description
  */
 %include
 {
+#include "exprScanToken.H"
 #include "volumeExprDriver.H"
 #include "volumeExprParser.H"
 #include "volumeExprScanner.H"
@@ -110,11 +111,8 @@ dnl
 %token_prefix TOK_
 
 // Terminals
-%token_type    {Foam::expressions::volumeExpr::scanToken*}
-// Non-terminals
-%type ivalue   { Foam::label }
-%type svalue   { Foam::scalar }
-%type ident    { Foam::word* }
+%token_type         {Foam::expressions::scanToken}
+%token_destructor   { ($$).destroy(); }
 
 // Volume fields
 declare_field(lfield, Foam::volScalarField, Foam::scalar, newVolField, getVolField)
@@ -144,17 +142,34 @@ declare_field(ptfield, Foam::pointTensorField, Foam::tensor, newPointField, getP
 // Lemon does not generate a destructor for that.
 // So do not use Lemon destructors for anything.
 
+standard_tokens()
 operator_precedence()
 
 %start_symbol evaluate
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
+/*---------------------------------------------------------------------------*\
+ * General Productions
+\*---------------------------------------------------------------------------*/
+
+%type identifier { Foam::word* }
+%destructor identifier { delete($$); $$ = nullptr; }
+
+identifier (lhs) ::= IDENTIFIER (tok) .
+{
+    // Take ownership of pointer from scan token
+    lhs = tok.name_; tok.name_ = nullptr;
+}
+
+
 /*---------------------------------------------------------------------------*\
  * Productions (scalar)
 \*---------------------------------------------------------------------------*/
 
-svalue (lhs) ::= NUMBER (a) .       { lhs = (a)->svalue; }  // From scanToken
+%type svalue { Foam::scalar }
+
+svalue (lhs) ::= NUMBER (tok) .     { lhs = (tok).scalarValue; } // scanToken
 svalue (lhs) ::= ZERO .             { lhs = Foam::Zero; }
 svalue (lhs) ::= PI LPAREN RPAREN . { lhs = Foam::constant::mathematical::pi; }
 svalue (lhs) ::= DEG_TO_RAD LPAREN RPAREN . { lhs = Foam::degToRad(); }
@@ -163,6 +178,32 @@ svalue (lhs) ::= ARG LPAREN RPAREN .  { lhs = driver->argValue(); }
 svalue (lhs) ::= TIME LPAREN RPAREN . { lhs = driver->timeValue(); }
 svalue (lhs) ::= DELTA_T LPAREN RPAREN . { lhs = driver->deltaT(); }
 
+svalue (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = 0;
+}
+
+
+/*---------------------------------------------------------------------------*\
+ * Productions (vector)
+\*---------------------------------------------------------------------------*/
+
+%type vvalue { Foam::vector* }
+%destructor vvalue { delete($$); $$ = nullptr; }
+
+vvalue (lhs) ::= VECTOR_VALUE (tok) .
+{
+    // Take ownership of pointer from scan token
+    lhs = tok.vectorPtr; tok.vectorPtr = nullptr;
+}
+
+vvalue (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN RPAREN .
+{
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+    lhs = new Foam::vector(0,0,0);
+}
+
 
 /* * * * * * * * * * * * * * * * Volume Fields * * * * * * * * * * * * * * * *\
 dnl
@@ -178,7 +219,9 @@ dnl
 /*---------------------------------------------------------------------------*\
  * Productions (volScalarField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [sfield])dnl
+define([_new_target_],  [_new_sfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -194,12 +237,12 @@ rules_scalar_operations()
 rules_scalar_functions()
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but manage via FieldOps::assign
-rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<Foam::scalar>())
+rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<_value_type_>())
 
 
 // Other functions
@@ -212,20 +255,30 @@ _target_ (lhs) ::= RAND LPAREN RPAREN .
 _target_ (lhs) ::= RAND LPAREN NUMBER (seed) RPAREN .
 {
     // Call with -ve seed to signal use of time index as seed
-    lhs = driver->field_rand(std::round(-(seed)->svalue)).ptr();
+    lhs = driver->field_rand(std::round(-(seed).scalarValue)).ptr();
+}
+
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
 }
 
 
 /*---------------------------------------------------------------------------*\
  * Productions (volVectorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [vfield])dnl
+define([_new_target_],  [_new_vfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a); }
 
+rule_field_from_value(_target_, vvalue)
 rule_get_field(_target_, VECTOR_ID)
 
 rules_standard(_target_, _value_type_, _logic_)
@@ -233,9 +286,20 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+// Other functions
+
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
+
 /*---------------------------------------------------------------------------*\
  * Productions (volSphericalTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [hfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
@@ -253,6 +317,7 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (volSymmTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [yfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
@@ -269,6 +334,7 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (volTensorField)
 dnl
+define([_scalar_arg_],  [sfield])dnl
 define([_target_],      [tfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
@@ -326,7 +392,9 @@ dnl> %ifndef disable_surface_fields
 /*---------------------------------------------------------------------------*\
  * Productions (surfaceScalarField)
 dnl
+define([_scalar_arg_],  [ssfield])dnl
 define([_target_],      [ssfield])dnl
+define([_new_target_],  [_new_ssfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -342,24 +410,34 @@ rules_scalar_operations()
 rules_scalar_functions()
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but manage via FieldOps::assign
-rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<Foam::scalar>())
+rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<_value_type_>())
+
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
 
 
 /*---------------------------------------------------------------------------*\
  * Productions (surfaceVectorField)
 dnl
+define([_scalar_arg_],  [ssfield])dnl
 define([_target_],      [svfield])dnl
+define([_new_target_],  [_new_svfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a); }
 
+rule_field_from_value(_target_, vvalue, FACE_EXPR)
 rule_get_field(_target_, SVECTOR_ID)
 
 rules_standard(_target_, _value_type_, _logic_)
@@ -367,10 +445,18 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 
 /*---------------------------------------------------------------------------*\
  * Productions (surfaceSphericalTensorField)
 dnl
+define([_scalar_arg_],  [ssfield])dnl
 define([_target_],      [shfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
@@ -388,6 +474,7 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (surfaceSymmTensorField)
 dnl
+define([_scalar_arg_],  [ssfield])dnl
 define([_target_],      [syfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
@@ -406,6 +493,7 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (surfaceTensorField)
 dnl
+define([_scalar_arg_],  [ssfield])dnl
 define([_target_],      [stfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
@@ -470,7 +558,9 @@ dnl> %ifndef disable_point_fields
 /*---------------------------------------------------------------------------*\
  * Productions (pointScalarField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [psfield])dnl
+define([_new_target_],  [_new_psfield])dnl
 define([_value_type_],  [Foam::scalar])dnl
 dnl
 \*---------------------------------------------------------------------------*/
@@ -484,12 +574,19 @@ rules_standard(_target_, _value_type_, _logic_)
 rules_inplace_gUnary(_target_)
 
 // Non-standard but manage via FieldOps::assign
-rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<Foam::scalar>())
-rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<Foam::scalar>())
+rule_unary_assign(_target_, _target_, FLOOR, Foam::floorOp<_value_type_>())
+rule_unary_assign(_target_, _target_, CEIL, Foam::ceilOp<_value_type_>())
+rule_unary_assign(_target_, _target_, ROUND, Foam::roundOp<_value_type_>())
 
 // Non-standard but manage via FieldOps::assign
-rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<Foam::scalar>())
+rule_binary_assign(_target_, _target_, _target_, HYPOT, Foam::hypotOp<_value_type_>())
+
+_target_ (lhs) ::= SCALAR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
 
 
 /*---------------------------------------------------------------------------*\
@@ -542,13 +639,16 @@ dnl*/
 /*---------------------------------------------------------------------------*\
  * Productions (pointVectorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [pvfield])dnl
+define([_new_target_],  [_new_pvfield])dnl
 define([_value_type_],  [Foam::vector])dnl
 dnl
 \*---------------------------------------------------------------------------*/
 
 evaluate ::= _target_ (a) . { driver->setResult(a); }
 
+rule_field_from_value(_target_, vvalue, POINT_EXPR)
 rule_get_field(_target_, PVECTOR_ID)
 
 rules_standard(_target_, _value_type_, _logic_)
@@ -556,9 +656,17 @@ rules_inplace_gUnary(_target_)
 rules_vector_operations()
 rules_vector_functions()
 
+_target_ (lhs) ::= VECTOR_FUNCTION_ID (name) LPAREN _scalar_arg_ (values) RPAREN.
+{
+    lhs = _new_target_;
+    (void) make_obj(values);
+    driver->reportFatal("Not implemented: " + make_obj(name.name_));
+}
+
 /*---------------------------------------------------------------------------*\
  * Productions (pointSphericalTensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [phfield])dnl
 define([_value_type_],  [Foam::sphericalTensor])dnl
 dnl
@@ -577,6 +685,7 @@ rules_sphTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (pointSymmTensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [pyfield])dnl
 define([_value_type_],  [Foam::symmTensor])dnl
 dnl
@@ -595,6 +704,7 @@ rules_symTensor_functions()
 /*---------------------------------------------------------------------------*\
  * Productions (pointTensorField)
 dnl
+define([_scalar_arg_],  [psfield])dnl
 define([_target_],      [ptfield])dnl
 define([_value_type_],  [Foam::tensor])dnl
 dnl
@@ -802,13 +912,15 @@ void Foam::expressions::volumeExpr::parser::start(parseDriver& driver_)
 }
 
 
-void Foam::expressions::volumeExpr::parser::parse
-(
-    int tokenId,
-    scanToken* tokenVal
-)
+void Foam::expressions::volumeExpr::parser::parse(int tokenId)
+{
+    Parse(lemon_, tokenId, scanToken::null());
+}
+
+
+void Foam::expressions::volumeExpr::parser::parse(int tokenId, scanToken tok)
 {
-    Parse(lemon_, tokenId, tokenVal);
+    Parse(lemon_, tokenId, tok);
 }
 
 
diff --git a/src/finiteVolume/expressions/volume/volumeExprLemonParserMacros.m4 b/src/finiteVolume/expressions/volume/volumeExprLemonParserMacros.m4
index 7cde6ab1e749d614f73b8212f132c24f386c8ff7..6d233bc1b29a72abbe0369f426bf2223c3a774e6 100644
--- a/src/finiteVolume/expressions/volume/volumeExprLemonParserMacros.m4
+++ b/src/finiteVolume/expressions/volume/volumeExprLemonParserMacros.m4
@@ -34,8 +34,14 @@ divert(-1)dnl
 
 define([rules_driver_volume_functions],
 [dnl
-rule_driver_select(_logic_, CELL_SET, field_cellSet)dnl
-rule_driver_select(_logic_, CELL_ZONE, field_cellZone)dnl
+_logic_ (lhs) ::= CELL_SET LPAREN identifier (name) RPAREN .dnl
+{dnl
+    lhs = driver->field_cellSet(make_obj(name)).ptr();dnl
+}dnl
+_logic_ (lhs) ::= CELL_ZONE LPAREN identifier (name) RPAREN .dnl
+{
+    lhs = driver->field_cellZone(make_obj(name)).ptr();dnl
+}dnl
 dnl
 rule_driver_nullary(_scalar_, CELL_VOLUME, field_cellVolume)dnl
 rule_driver_nullary(_vector_, POS, field_cellCentre)dnl CELL_CENTRE
@@ -56,8 +62,14 @@ dnl
 
 define([rules_driver_surface_functions],
 [dnl
-rule_driver_select(_logic_, FACE_SET, field_faceSet)dnl
-rule_driver_select(_logic_, FACE_ZONE, field_faceZone)dnl
+_logic_ (lhs) ::= FACE_SET LPAREN identifier (name) RPAREN .dnl
+{dnl
+    lhs = driver->field_faceSet(make_obj(name)).ptr();dnl
+}dnl
+_logic_ (lhs) ::= FACE_ZONE LPAREN identifier (name) RPAREN .dnl
+{dnl
+    lhs = driver->field_faceZone(make_obj(name)).ptr();dnl
+}dnl
 dnl
 rule_driver_nullary(_scalar_, FACE_AREA, field_faceArea)dnl
 rule_driver_nullary(_vector_, FACE_CENTRE, field_faceCentre)dnl
@@ -79,8 +91,14 @@ dnl
 
 define([rules_driver_point_functions],
 [dnl
-rule_driver_select(_logic_, POINT_SET, field_pointSet)dnl
-rule_driver_select(_logic_, POINT_ZONE, field_pointZone)dnl
+_logic_ (lhs) ::= POINT_SET LPAREN identifier (name) RPAREN .dnl
+{dnl
+    lhs = driver->field_pointSet(make_obj(*name)).ptr();dnl
+}dnl
+_logic_ (lhs) ::= POINT_ZONE LPAREN identifier (name) RPAREN .dnl
+{dnl
+    lhs = driver->field_pointZone(make_obj(*name)).ptr();dnl
+}dnl
 dnl
 rule_driver_nullary(_vector_, POINTS, field_pointField)dnl
 dnl
diff --git a/src/finiteVolume/expressions/volume/volumeExprParser.H b/src/finiteVolume/expressions/volume/volumeExprParser.H
index 110ba86ef52a22bafb4b1a6c40e2ba24a8be7901..1b6ab896d5b18e37352f1eb9d58e08b56723786c 100644
--- a/src/finiteVolume/expressions/volume/volumeExprParser.H
+++ b/src/finiteVolume/expressions/volume/volumeExprParser.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -34,6 +34,7 @@ Description
 #ifndef expressions_volumeExprParser_H
 #define expressions_volumeExprParser_H
 
+#include "exprScanToken.H"
 #include "volumeExprFwd.H"
 
 namespace Foam
@@ -97,8 +98,11 @@ public:
         //- Stop parsing, freeing the allocated parser
         void stop();
 
-        //- Push token/value to parser
-        void parse(int tokenId, scanToken* tokenVal);
+        //- Push token type to parser with default token
+        void parse(int tokenId);
+
+        //- Push token type/value to parser
+        void parse(int tokenId, scanToken tok);
 };
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteVolume/expressions/volume/volumeExprScanner.H b/src/finiteVolume/expressions/volume/volumeExprScanner.H
index 0e8e57957399cd59e686ee83c52bfee2625b4ada..3b5183ddfb353690ec598d883f9e091e9366ac8e 100644
--- a/src/finiteVolume/expressions/volume/volumeExprScanner.H
+++ b/src/finiteVolume/expressions/volume/volumeExprScanner.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2019 OpenCFD Ltd.
+    Copyright (C) 2019-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -37,8 +37,8 @@ Note
 #ifndef expressions_volumeExprScanner_H
 #define expressions_volumeExprScanner_H
 
+#include "exprScanToken.H"
 #include "volumeExprFwd.H"
-#include "scalar.H"
 
 namespace Foam
 {
@@ -47,21 +47,6 @@ namespace expressions
 namespace volumeExpr
 {
 
-/*---------------------------------------------------------------------------*\
-                          Class scanToken Declaration
-\*---------------------------------------------------------------------------*/
-
-union scanToken
-{
-    Foam::label  ivalue;
-    Foam::scalar svalue;
-    Foam::word*  name;
-
-    //- Default construct, bit-wise zero for union content
-    scanToken() : ivalue(0) {}
-};
-
-
 /*---------------------------------------------------------------------------*\
                          Class scanner Declaration
 \*---------------------------------------------------------------------------*/
@@ -83,16 +68,14 @@ class scanner
         bool dispatch_method
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
         //- Dispatch identifier to parser (if possible) or Fatal
         bool dispatch_ident
         (
             const parseDriver& driver_,
-            scanToken& scanTok,
-            word&& ident
+            word ident  // Receives a copy
         ) const;
 
 
diff --git a/src/finiteVolume/expressions/volume/volumeExprScanner.cc b/src/finiteVolume/expressions/volume/volumeExprScanner.cc
index 104e0ca66312b78efc38d9f2d9a1c59f7930a49c..735eacbec7d2b2ea7895323b81f4c39d72ae7383 100644
--- a/src/finiteVolume/expressions/volume/volumeExprScanner.cc
+++ b/src/finiteVolume/expressions/volume/volumeExprScanner.cc
@@ -44,7 +44,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -57,22 +56,20 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
 
 // Special handling for these known (stashed) look-back types
+#define HAS_LOOKBEHIND_TOKENS
 static const Enum<int> lookBehindTokenEnums
 ({
-    TOKEN_PAIR("cellSet", CELL_SET),
-    TOKEN_PAIR("faceSet", FACE_SET),
-    TOKEN_PAIR("pointSet", POINT_SET),
-    TOKEN_PAIR("cellZone", CELL_ZONE),
-    TOKEN_PAIR("faceZone", FACE_ZONE),
-    TOKEN_PAIR("pointZone", POINT_ZONE),
+    TOKEN_PAIR("cellZone", CELL_ZONE), TOKEN_PAIR("cellSet", CELL_SET),
+    TOKEN_PAIR("faceZone", FACE_ZONE), TOKEN_PAIR("faceSet", FACE_SET),
+    #ifdef TOK_POINT_ZONE
+    TOKEN_PAIR("pointZone", POINT_ZONE), TOKEN_PAIR("pointSet", POINT_SET),
+    #endif
 });
 
-#define HAS_LOOKBEHIND_TOKENS
-
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
 static const Enum<int> fieldMethodEnums
@@ -194,6 +191,7 @@ static int driverTokenType
     const word& ident
 )
 {
+    #ifdef HAS_LOOKBEHIND_TOKENS
     // Get stashed "look-behind" to decide what type of identifier we expect
     const int lookBehind = driver_.resetStashedTokenId();
 
@@ -203,12 +201,16 @@ static int driverTokenType
 
         switch (lookBehind)
         {
-            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
-            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
-            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
             case TOK_CELL_ZONE : good = driver_.isCellZone(ident); break;
+            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
+
             case TOK_FACE_ZONE : good = driver_.isFaceZone(ident); break;
+            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
+
+            #ifdef TOK_POINT_ZONE
             case TOK_POINT_ZONE : good = driver_.isPointZone(ident); break;
+            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
+            #endif
         }
 
         if (good)
@@ -224,65 +226,67 @@ static int driverTokenType
 
         return -2;  // Extra safety
     }
+    #endif
 
     // Surface variables - distinguish from volume by size
     #ifdef TOK_SSCALAR_ID
     {
         const label len = driver_.mesh().nInternalFaces();
 
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false, len))                      \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false, len))            \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SSCALAR_ID, scalar);
-        checkFieldToken(TOK_SVECTOR_ID, vector);
-        checkFieldToken(TOK_SSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_STENSOR_ID, tensor);
+        doLocalCode(TOK_SSCALAR_ID, scalar);
+        doLocalCode(TOK_SVECTOR_ID, vector);
+        doLocalCode(TOK_SSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_STENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
     // Point variables
     #ifdef TOK_PSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, true))                            \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, true))                  \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_PSCALAR_ID, scalar);
-        checkFieldToken(TOK_PVECTOR_ID, vector);
-        checkFieldToken(TOK_PSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_PSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PSCALAR_ID, scalar);
+        doLocalCode(TOK_PVECTOR_ID, vector);
+        doLocalCode(TOK_PSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_PSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
     // Volume variables
     #ifdef TOK_SCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false))                           \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false))                 \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SCALAR_ID, scalar);
-        checkFieldToken(TOK_VECTOR_ID, vector);
-        checkFieldToken(TOK_SPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_SYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_TENSOR_ID, tensor);
+        doLocalCode(TOK_SCALAR_ID, scalar);
+        doLocalCode(TOK_VECTOR_ID, vector);
+        doLocalCode(TOK_SPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_SYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_TENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
-    #undef checkFieldToken
-
     // Check registered fields and/or disk-files
     {
         const word fieldType(driver_.getFieldClassName(ident));
@@ -298,7 +302,7 @@ static int driverTokenType
     return -1;
 }
 
-} // End anonymous namespace
+} // End namespace Foam
 
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -311,20 +315,29 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
 
-#line 320 "volumeExprScanner.cc"
-static const int volumeExpr_start = 11;
-static const int volumeExpr_first_final = 11;
+#line 333 "volumeExprScanner.cc"
+static const int volumeExpr_start = 13;
+static const int volumeExpr_first_final = 13;
 static const int volumeExpr_error = 0;
 
-static const int volumeExpr_en_main = 11;
+static const int volumeExpr_en_main = 13;
 
 
-#line 460 "volumeExprScanner.rl"
+#line 480 "volumeExprScanner.rl"
 
 
 
@@ -344,8 +357,7 @@ Foam::expressions::volumeExpr::scanner::~scanner()
 bool Foam::expressions::volumeExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -362,8 +374,8 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -376,10 +388,11 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_method
 bool Foam::expressions::volumeExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -404,12 +417,12 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -419,17 +432,28 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -437,8 +461,9 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -470,12 +495,13 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -538,9 +564,6 @@ bool Foam::expressions::volumeExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -556,7 +579,7 @@ bool Foam::expressions::volumeExpr::scanner::process
 
     // Initialize FSM variables
     
-#line 560 "volumeExprScanner.cc"
+#line 583 "volumeExprScanner.cc"
 	{
 	cs = volumeExpr_start;
 	ts = 0;
@@ -564,44 +587,49 @@ bool Foam::expressions::volumeExpr::scanner::process
 	act = 0;
 	}
 
-#line 690 "volumeExprScanner.rl"
+#line 720 "volumeExprScanner.rl"
    /* ^^^ FSM initialization here ^^^ */;
 
     
-#line 572 "volumeExprScanner.cc"
+#line 595 "volumeExprScanner.cc"
 	{
 	if ( p == pe )
 		goto _test_eof;
 	switch ( cs )
 	{
 tr2:
-#line 342 "volumeExprScanner.rl"
+#line 358 "volumeExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr4:
-#line 342 "volumeExprScanner.rl"
+#line 358 "volumeExprScanner.rl"
 	{te = p+1;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr5:
-#line 320 "volumeExprScanner.rl"
+#line 333 "volumeExprScanner.rl"
 	{{p = ((te))-1;}{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -613,103 +641,122 @@ tr5:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
+	goto st13;
 tr8:
-#line 385 "volumeExprScanner.rl"
+#line 402 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(EQUAL); }}
-	goto st11;
+	goto st13;
 tr9:
-#line 439 "volumeExprScanner.rl"
+#line 456 "volumeExprScanner.rl"
 	{{p = ((te))-1;}{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
+	goto st13;
 tr11:
-#line 447 "volumeExprScanner.rl"
+#line 467 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(IDENTITY_TENSOR); }}
-	goto st11;
+	goto st13;
 tr12:
-#line 388 "volumeExprScanner.rl"
-	{te = p+1;{ EMIT_TOKEN(LOR); }}
-	goto st11;
+#line 455 "volumeExprScanner.rl"
+	{{p = ((te))-1;}{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+tr14:
+#line 464 "volumeExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(1,0,0); }}
+	goto st13;
+tr15:
+#line 465 "volumeExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,1,0); }}
+	goto st13;
 tr16:
-#line 370 "volumeExprScanner.rl"
+#line 466 "volumeExprScanner.rl"
+	{te = p+1;{ EMIT_VECTOR_TOKEN(0,0,1); }}
+	goto st13;
+tr17:
+#line 405 "volumeExprScanner.rl"
+	{te = p+1;{ EMIT_TOKEN(LOR); }}
+	goto st13;
+tr21:
+#line 387 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PERCENT); }}
-	goto st11;
-tr19:
-#line 371 "volumeExprScanner.rl"
+	goto st13;
+tr24:
+#line 388 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LPAREN); }}
-	goto st11;
-tr20:
-#line 372 "volumeExprScanner.rl"
+	goto st13;
+tr25:
+#line 389 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(RPAREN); }}
-	goto st11;
-tr21:
-#line 373 "volumeExprScanner.rl"
+	goto st13;
+tr26:
+#line 390 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(TIMES); }}
-	goto st11;
-tr22:
-#line 374 "volumeExprScanner.rl"
+	goto st13;
+tr27:
+#line 391 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(PLUS); }}
-	goto st11;
-tr23:
-#line 376 "volumeExprScanner.rl"
+	goto st13;
+tr28:
+#line 393 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COMMA); }}
-	goto st11;
-tr24:
-#line 375 "volumeExprScanner.rl"
+	goto st13;
+tr29:
+#line 392 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(MINUS); }}
-	goto st11;
-tr26:
-#line 378 "volumeExprScanner.rl"
+	goto st13;
+tr31:
+#line 395 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(DIVIDE); }}
-	goto st11;
-tr28:
-#line 380 "volumeExprScanner.rl"
+	goto st13;
+tr33:
+#line 397 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(COLON); }}
-	goto st11;
-tr32:
-#line 379 "volumeExprScanner.rl"
+	goto st13;
+tr37:
+#line 396 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(QUESTION); }}
-	goto st11;
-tr35:
-#line 391 "volumeExprScanner.rl"
+	goto st13;
+tr40:
+#line 408 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(BIT_XOR); }}
-	goto st11;
-tr52:
-#line 364 "volumeExprScanner.rl"
+	goto st13;
+tr57:
+#line 381 "volumeExprScanner.rl"
 	{te = p;p--;}
-	goto st11;
-tr53:
-#line 369 "volumeExprScanner.rl"
-	{te = p;p--;{ EMIT_TOKEN(NOT); }}
-	goto st11;
-tr54:
+	goto st13;
+tr58:
 #line 386 "volumeExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(LNOT); }}
+	goto st13;
+tr59:
+#line 403 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(NOT_EQUAL); }}
-	goto st11;
-tr55:
-#line 389 "volumeExprScanner.rl"
+	goto st13;
+tr60:
+#line 406 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(BIT_AND); }}
-	goto st11;
-tr56:
-#line 387 "volumeExprScanner.rl"
+	goto st13;
+tr61:
+#line 404 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LAND); }}
-	goto st11;
-tr57:
-#line 377 "volumeExprScanner.rl"
+	goto st13;
+tr62:
+#line 394 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(DOT); }}
-	goto st11;
-tr60:
-#line 320 "volumeExprScanner.rl"
+	goto st13;
+tr65:
+#line 333 "volumeExprScanner.rl"
 	{te = p;p--;{
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -721,41 +768,42 @@ tr60:
 
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr62:
-#line 348 "volumeExprScanner.rl"
+	goto st13;
+tr67:
+#line 365 "volumeExprScanner.rl"
 	{te = p;p--;{
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr63:
-#line 381 "volumeExprScanner.rl"
+	goto st13;
+tr68:
+#line 398 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LESS); }}
-	goto st11;
-tr64:
-#line 382 "volumeExprScanner.rl"
+	goto st13;
+tr69:
+#line 399 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(LESS_EQ); }}
-	goto st11;
-tr65:
-#line 383 "volumeExprScanner.rl"
+	goto st13;
+tr70:
+#line 400 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(GREATER); }}
-	goto st11;
-tr66:
-#line 384 "volumeExprScanner.rl"
+	goto st13;
+tr71:
+#line 401 "volumeExprScanner.rl"
 	{te = p+1;{ EMIT_TOKEN(GREATER_EQ); }}
-	goto st11;
-tr67:
-#line 342 "volumeExprScanner.rl"
+	goto st13;
+tr72:
+#line 358 "volumeExprScanner.rl"
 	{te = p;p--;{
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }}
-	goto st11;
-tr69:
+	goto st13;
+tr74:
 #line 1 "NONE"
 	{	switch( act ) {
 	case 26:
@@ -836,9 +884,6 @@ tr69:
 	case 60:
 	{{p = ((te))-1;} EMIT_TOKEN(BOOL); }
 	break;
-	case 61:
-	{{p = ((te))-1;} EMIT_TOKEN(VECTOR); }
-	break;
 	case 63:
 	{{p = ((te))-1;} EMIT_TOKEN(SYM_TENSOR); }
 	break;
@@ -846,153 +891,158 @@ tr69:
 	{{p = ((te))-1;} EMIT_TOKEN(SPH_TENSOR); }
 	break;
 	case 65:
-	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
+	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
 	break;
 	case 66:
-	{{p = ((te))-1;} EMIT_TOKEN(LTRUE); }
+	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
 	break;
 	case 67:
-	{{p = ((te))-1;} EMIT_TOKEN(LFALSE); }
+	{{p = ((te))-1;} EMIT_TOKEN(ZERO); }
 	break;
-	case 69:
+	case 72:
 	{{p = ((te))-1;} EMIT_TOKEN(ARG); }
 	break;
-	case 70:
+	case 73:
 	{{p = ((te))-1;} EMIT_TOKEN(TIME); }
 	break;
-	case 71:
+	case 74:
 	{{p = ((te))-1;} EMIT_TOKEN(DELTA_T); }
 	break;
-	case 72:
+	case 75:
 	{{p = ((te))-1;}
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 	break;
 	}
 	}
-	goto st11;
-tr85:
-#line 413 "volumeExprScanner.rl"
+	goto st13;
+tr90:
+#line 430 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(ATAN); }}
-	goto st11;
-tr100:
-#line 409 "volumeExprScanner.rl"
+	goto st13;
+tr105:
+#line 426 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(COS); }}
-	goto st11;
-tr121:
-#line 402 "volumeExprScanner.rl"
+	goto st13;
+tr126:
+#line 419 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(LOG); }}
-	goto st11;
-tr128:
-#line 418 "volumeExprScanner.rl"
+	goto st13;
+tr133:
+#line 435 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(MAG); }}
-	goto st11;
-tr135:
-#line 422 "volumeExprScanner.rl"
+	goto st13;
+tr140:
+#line 439 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(NEG); }}
-	goto st11;
-tr141:
-#line 421 "volumeExprScanner.rl"
+	goto st13;
+tr146:
+#line 438 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(POS); }}
-	goto st11;
-tr160:
-#line 408 "volumeExprScanner.rl"
+	goto st13;
+tr165:
+#line 425 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SIN); }}
-	goto st11;
-tr176:
-#line 405 "volumeExprScanner.rl"
+	goto st13;
+tr181:
+#line 422 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(SQR); }}
-	goto st11;
-tr192:
-#line 410 "volumeExprScanner.rl"
+	goto st13;
+tr197:
+#line 427 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TAN); }}
-	goto st11;
-tr198:
-#line 439 "volumeExprScanner.rl"
+	goto st13;
+tr203:
+#line 456 "volumeExprScanner.rl"
 	{te = p;p--;{ EMIT_TOKEN(TENSOR); }}
-	goto st11;
-st11:
+	goto st13;
+tr214:
+#line 455 "volumeExprScanner.rl"
+	{te = p;p--;{ EMIT_TOKEN(VECTOR); }}
+	goto st13;
+st13:
 #line 1 "NONE"
 	{ts = 0;}
 	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
+		goto _test_eof13;
+case 13:
 #line 1 "NONE"
 	{ts = p;}
-#line 925 "volumeExprScanner.cc"
+#line 975 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 32: goto st12;
-		case 33: goto st13;
+		case 32: goto st14;
+		case 33: goto st15;
 		case 34: goto st1;
-		case 37: goto tr16;
-		case 38: goto st14;
+		case 37: goto tr21;
+		case 38: goto st16;
 		case 39: goto st3;
-		case 40: goto tr19;
-		case 41: goto tr20;
-		case 42: goto tr21;
-		case 43: goto tr22;
-		case 44: goto tr23;
-		case 45: goto tr24;
-		case 46: goto st15;
-		case 47: goto tr26;
-		case 58: goto tr28;
-		case 60: goto st20;
+		case 40: goto tr24;
+		case 41: goto tr25;
+		case 42: goto tr26;
+		case 43: goto tr27;
+		case 44: goto tr28;
+		case 45: goto tr29;
+		case 46: goto st17;
+		case 47: goto tr31;
+		case 58: goto tr33;
+		case 60: goto st22;
 		case 61: goto st7;
-		case 62: goto st21;
-		case 63: goto tr32;
-		case 90: goto st24;
-		case 94: goto tr35;
-		case 95: goto st22;
-		case 97: goto st27;
-		case 98: goto st41;
-		case 99: goto st44;
-		case 100: goto st49;
-		case 101: goto st59;
-		case 102: goto st61;
-		case 108: goto st65;
-		case 109: goto st69;
-		case 110: goto st75;
-		case 112: goto st78;
-		case 114: goto st81;
-		case 115: goto st89;
-		case 116: goto st117;
-		case 118: goto st129;
-		case 119: goto st134;
-		case 124: goto st10;
+		case 62: goto st23;
+		case 63: goto tr37;
+		case 90: goto st26;
+		case 94: goto tr40;
+		case 95: goto st24;
+		case 97: goto st29;
+		case 98: goto st43;
+		case 99: goto st46;
+		case 100: goto st51;
+		case 101: goto st61;
+		case 102: goto st63;
+		case 108: goto st67;
+		case 109: goto st71;
+		case 110: goto st77;
+		case 112: goto st80;
+		case 114: goto st83;
+		case 115: goto st91;
+		case 116: goto st119;
+		case 118: goto st131;
+		case 119: goto st137;
+		case 124: goto st12;
 	}
 	if ( (*p) < 48 ) {
 		if ( 9 <= (*p) && (*p) <= 13 )
-			goto st12;
+			goto st14;
 	} else if ( (*p) > 57 ) {
 		if ( (*p) > 89 ) {
 			if ( 103 <= (*p) && (*p) <= 122 )
-				goto st22;
+				goto st24;
 		} else if ( (*p) >= 65 )
-			goto st22;
+			goto st24;
 	} else
-		goto tr27;
+		goto tr32;
 	goto st0;
 st0:
 cs = 0;
 	goto _out;
-st12:
+st14:
 	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
+		goto _test_eof14;
+case 14:
 	if ( (*p) == 32 )
-		goto st12;
+		goto st14;
 	if ( 9 <= (*p) && (*p) <= 13 )
-		goto st12;
-	goto tr52;
-st13:
+		goto st14;
+	goto tr57;
+st15:
 	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
+		goto _test_eof15;
+case 15:
 	if ( (*p) == 61 )
-		goto tr54;
-	goto tr53;
+		goto tr59;
+	goto tr58;
 st1:
 	if ( ++p == pe )
 		goto _test_eof1;
@@ -1007,13 +1057,13 @@ case 2:
 	if ( (*p) == 34 )
 		goto tr2;
 	goto st2;
-st14:
+st16:
 	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
+		goto _test_eof16;
+case 16:
 	if ( (*p) == 38 )
-		goto tr56;
-	goto tr55;
+		goto tr61;
+	goto tr60;
 st3:
 	if ( ++p == pe )
 		goto _test_eof3;
@@ -1028,35 +1078,35 @@ case 4:
 	if ( (*p) == 39 )
 		goto tr4;
 	goto st4;
-st15:
+st17:
 	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
+		goto _test_eof17;
+case 17:
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr58;
+			goto tr63;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else
-		goto st18;
-	goto tr57;
-tr58:
+		goto st20;
+	goto tr62;
+tr63:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st16;
-st16:
+	goto st18;
+st18:
 	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-#line 1053 "volumeExprScanner.cc"
+		goto _test_eof18;
+case 18:
+#line 1103 "volumeExprScanner.cc"
 	switch( (*p) ) {
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr58;
-	goto tr60;
+		goto tr63;
+	goto tr65;
 st5:
 	if ( ++p == pe )
 		goto _test_eof5;
@@ -1066,56 +1116,56 @@ case 5:
 		case 45: goto st6;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
 st6:
 	if ( ++p == pe )
 		goto _test_eof6;
 case 6:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
+		goto st19;
 	goto tr5;
-st17:
+st19:
 	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
+		goto _test_eof19;
+case 19:
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st17;
-	goto tr60;
-st18:
+		goto st19;
+	goto tr65;
+st20:
 	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
+		goto _test_eof20;
+case 20:
 	if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto st18;
+			goto st20;
 	} else if ( (*p) >= 65 )
-		goto st18;
-	goto tr62;
-tr27:
+		goto st20;
+	goto tr67;
+tr32:
 #line 1 "NONE"
 	{te = p+1;}
-	goto st19;
-st19:
+	goto st21;
+st21:
 	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-#line 1104 "volumeExprScanner.cc"
+		goto _test_eof21;
+case 21:
+#line 1154 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr58;
+		case 46: goto tr63;
 		case 69: goto st5;
 		case 101: goto st5;
 	}
 	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr27;
-	goto tr60;
-st20:
+		goto tr32;
+	goto tr65;
+st22:
 	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
+		goto _test_eof22;
+case 22:
 	if ( (*p) == 61 )
-		goto tr64;
-	goto tr63;
+		goto tr69;
+	goto tr68;
 st7:
 	if ( ++p == pe )
 		goto _test_eof7;
@@ -1123,2562 +1173,2594 @@ case 7:
 	if ( (*p) == 61 )
 		goto tr8;
 	goto st0;
-st21:
+st23:
 	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
+		goto _test_eof23;
+case 23:
 	if ( (*p) == 61 )
-		goto tr66;
-	goto tr65;
-st22:
+		goto tr71;
+	goto tr70;
+st24:
 	if ( ++p == pe )
-		goto _test_eof22;
-case 22:
+		goto _test_eof24;
+case 24:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
-tr68:
+		goto tr73;
+	goto tr72;
+tr73:
 #line 1 "NONE"
 	{te = p+1;}
-#line 342 "volumeExprScanner.rl"
-	{act = 72;}
-	goto st23;
-tr72:
+#line 358 "volumeExprScanner.rl"
+	{act = 75;}
+	goto st25;
+tr77:
 #line 1 "NONE"
 	{te = p+1;}
-#line 444 "volumeExprScanner.rl"
-	{act = 65;}
-	goto st23;
-tr79:
+#line 463 "volumeExprScanner.rl"
+	{act = 67;}
+	goto st25;
+tr84:
 #line 1 "NONE"
 	{te = p+1;}
-#line 412 "volumeExprScanner.rl"
+#line 429 "volumeExprScanner.rl"
 	{act = 40;}
-	goto st23;
-tr80:
+	goto st25;
+tr85:
 #line 1 "NONE"
 	{te = p+1;}
-#line 448 "volumeExprScanner.rl"
-	{act = 69;}
-	goto st23;
-tr82:
+#line 468 "volumeExprScanner.rl"
+	{act = 72;}
+	goto st25;
+tr87:
 #line 1 "NONE"
 	{te = p+1;}
-#line 411 "volumeExprScanner.rl"
+#line 428 "volumeExprScanner.rl"
 	{act = 39;}
-	goto st23;
-tr86:
+	goto st25;
+tr91:
 #line 1 "NONE"
 	{te = p+1;}
-#line 414 "volumeExprScanner.rl"
+#line 431 "volumeExprScanner.rl"
 	{act = 42;}
-	goto st23;
-tr91:
+	goto st25;
+tr96:
 #line 1 "NONE"
 	{te = p+1;}
-#line 430 "volumeExprScanner.rl"
+#line 447 "volumeExprScanner.rl"
 	{act = 55;}
-	goto st23;
-tr94:
+	goto st25;
+tr99:
 #line 1 "NONE"
 	{te = p+1;}
-#line 437 "volumeExprScanner.rl"
+#line 454 "volumeExprScanner.rl"
 	{act = 60;}
-	goto st23;
-tr98:
+	goto st25;
+tr103:
 #line 1 "NONE"
 	{te = p+1;}
-#line 407 "volumeExprScanner.rl"
+#line 424 "volumeExprScanner.rl"
 	{act = 35;}
-	goto st23;
-tr101:
+	goto st25;
+tr106:
 #line 1 "NONE"
 	{te = p+1;}
-#line 416 "volumeExprScanner.rl"
+#line 433 "volumeExprScanner.rl"
 	{act = 44;}
-	goto st23;
-tr109:
+	goto st25;
+tr114:
 #line 1 "NONE"
 	{te = p+1;}
-#line 399 "volumeExprScanner.rl"
+#line 416 "volumeExprScanner.rl"
 	{act = 27;}
-	goto st23;
-tr112:
+	goto st25;
+tr117:
 #line 1 "NONE"
 	{te = p+1;}
-#line 450 "volumeExprScanner.rl"
-	{act = 71;}
-	goto st23;
-tr114:
+#line 470 "volumeExprScanner.rl"
+	{act = 74;}
+	goto st25;
+tr119:
 #line 1 "NONE"
 	{te = p+1;}
-#line 401 "volumeExprScanner.rl"
+#line 418 "volumeExprScanner.rl"
 	{act = 29;}
-	goto st23;
-tr118:
+	goto st25;
+tr123:
 #line 1 "NONE"
 	{te = p+1;}
-#line 446 "volumeExprScanner.rl"
-	{act = 67;}
-	goto st23;
-tr123:
+#line 462 "volumeExprScanner.rl"
+	{act = 66;}
+	goto st25;
+tr128:
 #line 1 "NONE"
 	{te = p+1;}
-#line 403 "volumeExprScanner.rl"
+#line 420 "volumeExprScanner.rl"
 	{act = 31;}
-	goto st23;
-tr127:
+	goto st25;
+tr132:
 #line 1 "NONE"
 	{te = p+1;}
-#line 429 "volumeExprScanner.rl"
+#line 446 "volumeExprScanner.rl"
 	{act = 54;}
-	goto st23;
-tr131:
+	goto st25;
+tr136:
 #line 1 "NONE"
 	{te = p+1;}
-#line 419 "volumeExprScanner.rl"
+#line 436 "volumeExprScanner.rl"
 	{act = 47;}
-	goto st23;
-tr132:
+	goto st25;
+tr137:
 #line 1 "NONE"
 	{te = p+1;}
-#line 428 "volumeExprScanner.rl"
+#line 445 "volumeExprScanner.rl"
 	{act = 53;}
-	goto st23;
-tr136:
+	goto st25;
+tr141:
 #line 1 "NONE"
 	{te = p+1;}
-#line 424 "volumeExprScanner.rl"
+#line 441 "volumeExprScanner.rl"
 	{act = 51;}
-	goto st23;
-tr137:
+	goto st25;
+tr142:
 #line 1 "NONE"
 	{te = p+1;}
-#line 398 "volumeExprScanner.rl"
+#line 415 "volumeExprScanner.rl"
 	{act = 26;}
-	goto st23;
-tr140:
+	goto st25;
+tr145:
 #line 1 "NONE"
 	{te = p+1;}
-#line 404 "volumeExprScanner.rl"
+#line 421 "volumeExprScanner.rl"
 	{act = 32;}
-	goto st23;
-tr142:
+	goto st25;
+tr147:
 #line 1 "NONE"
 	{te = p+1;}
-#line 423 "volumeExprScanner.rl"
+#line 440 "volumeExprScanner.rl"
 	{act = 50;}
-	goto st23;
-tr150:
+	goto st25;
+tr155:
 #line 1 "NONE"
 	{te = p+1;}
-#line 400 "volumeExprScanner.rl"
+#line 417 "volumeExprScanner.rl"
 	{act = 28;}
-	goto st23;
-tr151:
+	goto st25;
+tr156:
 #line 1 "NONE"
 	{te = p+1;}
-#line 434 "volumeExprScanner.rl"
+#line 451 "volumeExprScanner.rl"
 	{act = 59;}
-	goto st23;
-tr159:
+	goto st25;
+tr164:
 #line 1 "NONE"
 	{te = p+1;}
-#line 425 "volumeExprScanner.rl"
+#line 442 "volumeExprScanner.rl"
 	{act = 52;}
-	goto st23;
-tr161:
+	goto st25;
+tr166:
 #line 1 "NONE"
 	{te = p+1;}
-#line 415 "volumeExprScanner.rl"
+#line 432 "volumeExprScanner.rl"
 	{act = 43;}
-	goto st23;
-tr174:
+	goto st25;
+tr179:
 #line 1 "NONE"
 	{te = p+1;}
-#line 441 "volumeExprScanner.rl"
+#line 458 "volumeExprScanner.rl"
 	{act = 64;}
-	goto st23;
-tr177:
+	goto st25;
+tr182:
 #line 1 "NONE"
 	{te = p+1;}
-#line 406 "volumeExprScanner.rl"
+#line 423 "volumeExprScanner.rl"
 	{act = 34;}
-	goto st23;
-tr178:
+	goto st25;
+tr183:
 #line 1 "NONE"
 	{te = p+1;}
-#line 431 "volumeExprScanner.rl"
+#line 448 "volumeExprScanner.rl"
 	{act = 56;}
-	goto st23;
-tr186:
+	goto st25;
+tr191:
 #line 1 "NONE"
 	{te = p+1;}
-#line 440 "volumeExprScanner.rl"
+#line 457 "volumeExprScanner.rl"
 	{act = 63;}
-	goto st23;
-tr193:
+	goto st25;
+tr198:
 #line 1 "NONE"
 	{te = p+1;}
-#line 417 "volumeExprScanner.rl"
+#line 434 "volumeExprScanner.rl"
 	{act = 45;}
-	goto st23;
-tr201:
+	goto st25;
+tr206:
 #line 1 "NONE"
 	{te = p+1;}
-#line 449 "volumeExprScanner.rl"
-	{act = 70;}
-	goto st23;
-tr203:
-#line 1 "NONE"
-	{te = p+1;}
-#line 445 "volumeExprScanner.rl"
-	{act = 66;}
-	goto st23;
+#line 469 "volumeExprScanner.rl"
+	{act = 73;}
+	goto st25;
 tr208:
 #line 1 "NONE"
 	{te = p+1;}
-#line 438 "volumeExprScanner.rl"
-	{act = 61;}
-	goto st23;
-tr221:
+#line 461 "volumeExprScanner.rl"
+	{act = 65;}
+	goto st25;
+tr228:
 #line 1 "NONE"
 	{te = p+1;}
-#line 432 "volumeExprScanner.rl"
+#line 449 "volumeExprScanner.rl"
 	{act = 57;}
-	goto st23;
-tr223:
+	goto st25;
+tr230:
 #line 1 "NONE"
 	{te = p+1;}
-#line 433 "volumeExprScanner.rl"
+#line 450 "volumeExprScanner.rl"
 	{act = 58;}
-	goto st23;
-st23:
-	if ( ++p == pe )
-		goto _test_eof23;
-case 23:
-#line 1371 "volumeExprScanner.cc"
-	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
-	} else
-		goto tr68;
-	goto tr69;
-st24:
-	if ( ++p == pe )
-		goto _test_eof24;
-case 24:
-	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st25;
-	}
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
-	} else
-		goto tr68;
-	goto tr67;
+	goto st25;
 st25:
 	if ( ++p == pe )
 		goto _test_eof25;
 case 25:
+#line 1415 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st26;
+		case 46: goto tr73;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr74;
 st26:
 	if ( ++p == pe )
 		goto _test_eof26;
 case 26:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto tr72;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st27;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st27:
 	if ( ++p == pe )
 		goto _test_eof27;
 case 27:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 99: goto st28;
-		case 114: goto st30;
-		case 115: goto st31;
-		case 116: goto st33;
-		case 118: goto st36;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st28;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st28:
 	if ( ++p == pe )
 		goto _test_eof28;
 case 28:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st29;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto tr77;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st29:
 	if ( ++p == pe )
 		goto _test_eof29;
 case 29:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto tr79;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 99: goto st30;
+		case 114: goto st32;
+		case 115: goto st33;
+		case 116: goto st35;
+		case 118: goto st38;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st30:
 	if ( ++p == pe )
 		goto _test_eof30;
 case 30:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto tr80;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st31;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st31:
 	if ( ++p == pe )
 		goto _test_eof31;
 case 31:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 105: goto st32;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto tr84;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st32:
 	if ( ++p == pe )
 		goto _test_eof32;
 case 32:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto tr82;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto tr85;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st33:
 	if ( ++p == pe )
 		goto _test_eof33;
 case 33:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st34;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 105: goto st34;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st34:
 	if ( ++p == pe )
 		goto _test_eof34;
 case 34:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto st35;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto tr87;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st35:
 	if ( ++p == pe )
 		goto _test_eof35;
 case 35:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 50: goto tr86;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st36;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr85;
+		goto tr73;
+	goto tr72;
 st36:
 	if ( ++p == pe )
 		goto _test_eof36;
 case 36:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st37;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto st37;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st37:
 	if ( ++p == pe )
 		goto _test_eof37;
 case 37:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st38;
+		case 46: goto tr73;
+		case 50: goto tr91;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr90;
 st38:
 	if ( ++p == pe )
 		goto _test_eof38;
 case 38:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st39;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st39;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st39:
 	if ( ++p == pe )
 		goto _test_eof39;
 case 39:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st40;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st40;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st40:
 	if ( ++p == pe )
 		goto _test_eof40;
 case 40:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto tr91;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st41;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st41:
 	if ( ++p == pe )
 		goto _test_eof41;
 case 41:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st42;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st42;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st42:
 	if ( ++p == pe )
 		goto _test_eof42;
 case 42:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st43;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto tr96;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st43:
 	if ( ++p == pe )
 		goto _test_eof43;
 case 43:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 108: goto tr94;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st44;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st44:
 	if ( ++p == pe )
 		goto _test_eof44;
 case 44:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 98: goto st45;
-		case 111: goto st47;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st45;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st45:
 	if ( ++p == pe )
 		goto _test_eof45;
 case 45:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st46;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 108: goto tr99;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st46:
 	if ( ++p == pe )
 		goto _test_eof46;
 case 46:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 116: goto tr98;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 98: goto st47;
+		case 111: goto st49;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st47:
 	if ( ++p == pe )
 		goto _test_eof47;
 case 47:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st48;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st48;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st48:
 	if ( ++p == pe )
 		goto _test_eof48;
 case 48:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 104: goto tr101;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 116: goto tr103;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr100;
+		goto tr73;
+	goto tr72;
 st49:
 	if ( ++p == pe )
 		goto _test_eof49;
 case 49:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st50;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st50;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st50:
 	if ( ++p == pe )
 		goto _test_eof50;
 case 50:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st51;
-		case 108: goto st56;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 104: goto tr106;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr105;
 st51:
 	if ( ++p == pe )
 		goto _test_eof51;
 case 51:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 84: goto st52;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st52;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st52:
 	if ( ++p == pe )
 		goto _test_eof52;
 case 52:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st53;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st53;
+		case 108: goto st58;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st53:
 	if ( ++p == pe )
 		goto _test_eof53;
 case 53:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 82: goto st54;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 84: goto st54;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st54:
 	if ( ++p == pe )
 		goto _test_eof54;
 case 54:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st55;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st55;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st55:
 	if ( ++p == pe )
 		goto _test_eof55;
 case 55:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 100: goto tr109;
+		case 46: goto tr73;
+		case 82: goto st56;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st56:
 	if ( ++p == pe )
 		goto _test_eof56;
 case 56:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 116: goto st57;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st57;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st57:
 	if ( ++p == pe )
 		goto _test_eof57;
 case 57:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st58;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 100: goto tr114;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st58:
 	if ( ++p == pe )
 		goto _test_eof58;
 case 58:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 84: goto tr112;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 116: goto st59;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st59:
 	if ( ++p == pe )
 		goto _test_eof59;
 case 59:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 120: goto st60;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st60;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st60:
 	if ( ++p == pe )
 		goto _test_eof60;
 case 60:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 112: goto tr114;
+		case 46: goto tr73;
+		case 84: goto tr117;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st61:
 	if ( ++p == pe )
 		goto _test_eof61;
 case 61:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st62;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 120: goto st62;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st62:
 	if ( ++p == pe )
 		goto _test_eof62;
 case 62:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 108: goto st63;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 112: goto tr119;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st63:
 	if ( ++p == pe )
 		goto _test_eof63;
 case 63:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st64;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st64;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st64:
 	if ( ++p == pe )
 		goto _test_eof64;
 case 64:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto tr118;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 108: goto st65;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st65:
 	if ( ++p == pe )
 		goto _test_eof65;
 case 65:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st66;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st66;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st66:
 	if ( ++p == pe )
 		goto _test_eof66;
 case 66:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st67;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto tr123;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st67:
 	if ( ++p == pe )
 		goto _test_eof67;
 case 67:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 49: goto st68;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st68;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr121;
+		goto tr73;
+	goto tr72;
 st68:
 	if ( ++p == pe )
 		goto _test_eof68;
 case 68:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 48: goto tr123;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st69;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st69:
 	if ( ++p == pe )
 		goto _test_eof69;
 case 69:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st70;
-		case 105: goto st74;
+		case 46: goto tr73;
+		case 49: goto st70;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr126;
 st70:
 	if ( ++p == pe )
 		goto _test_eof70;
 case 70:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st71;
-		case 120: goto tr127;
+		case 46: goto tr73;
+		case 48: goto tr128;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st71:
 	if ( ++p == pe )
 		goto _test_eof71;
 case 71:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 83: goto st72;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st72;
+		case 105: goto st76;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr128;
+		goto tr73;
+	goto tr72;
 st72:
 	if ( ++p == pe )
 		goto _test_eof72;
 case 72:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 113: goto st73;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st73;
+		case 120: goto tr132;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st73:
 	if ( ++p == pe )
 		goto _test_eof73;
 case 73:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto tr131;
+		case 46: goto tr73;
+		case 83: goto st74;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr133;
 st74:
 	if ( ++p == pe )
 		goto _test_eof74;
 case 74:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto tr132;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 113: goto st75;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st75:
 	if ( ++p == pe )
 		goto _test_eof75;
 case 75:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st76;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto tr136;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st76:
 	if ( ++p == pe )
 		goto _test_eof76;
 case 76:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st77;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto tr137;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st77:
 	if ( ++p == pe )
 		goto _test_eof77;
 case 77:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 48: goto tr136;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st78;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr135;
+		goto tr73;
+	goto tr72;
 st78:
 	if ( ++p == pe )
 		goto _test_eof78;
 case 78:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 105: goto tr137;
-		case 111: goto st79;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st79;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st79:
 	if ( ++p == pe )
 		goto _test_eof79;
 case 79:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st80;
-		case 119: goto tr140;
+		case 46: goto tr73;
+		case 48: goto tr141;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr140;
 st80:
 	if ( ++p == pe )
 		goto _test_eof80;
 case 80:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 48: goto tr142;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 105: goto tr142;
+		case 111: goto st81;
 	}
 	if ( (*p) < 65 ) {
-		if ( 49 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr141;
+		goto tr73;
+	goto tr72;
 st81:
 	if ( ++p == pe )
 		goto _test_eof81;
 case 81:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st82;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st82;
+		case 119: goto tr145;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st82:
 	if ( ++p == pe )
 		goto _test_eof82;
 case 82:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 100: goto st83;
-		case 110: goto st88;
+		case 46: goto tr73;
+		case 48: goto tr147;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+		if ( 49 <= (*p) && (*p) <= 57 )
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr146;
 st83:
 	if ( ++p == pe )
 		goto _test_eof83;
 case 83:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 84: goto st84;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st84;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st84:
 	if ( ++p == pe )
 		goto _test_eof84;
 case 84:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st85;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 100: goto st85;
+		case 110: goto st90;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st85:
 	if ( ++p == pe )
 		goto _test_eof85;
 case 85:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 68: goto st86;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 84: goto st86;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st86:
 	if ( ++p == pe )
 		goto _test_eof86;
 case 86:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st87;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st87;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st87:
 	if ( ++p == pe )
 		goto _test_eof87;
 case 87:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto tr150;
+		case 46: goto tr73;
+		case 68: goto st88;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st88:
 	if ( ++p == pe )
 		goto _test_eof88;
 case 88:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 100: goto tr151;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st89;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st89:
 	if ( ++p == pe )
 		goto _test_eof89;
 case 89:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 105: goto st90;
-		case 112: goto st93;
-		case 113: goto st106;
-		case 117: goto st108;
-		case 121: goto st109;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto tr155;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st90:
 	if ( ++p == pe )
 		goto _test_eof90;
 case 90:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st91;
-		case 110: goto st92;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 100: goto tr156;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st91:
 	if ( ++p == pe )
 		goto _test_eof91;
 case 91:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto tr159;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 105: goto st92;
+		case 112: goto st95;
+		case 113: goto st108;
+		case 117: goto st110;
+		case 121: goto st111;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st92:
 	if ( ++p == pe )
 		goto _test_eof92;
 case 92:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 104: goto tr161;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st93;
+		case 110: goto st94;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr160;
+		goto tr73;
+	goto tr72;
 st93:
 	if ( ++p == pe )
 		goto _test_eof93;
 case 93:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 104: goto st94;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto tr164;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st94:
 	if ( ++p == pe )
 		goto _test_eof94;
 case 94:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st95;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 104: goto tr166;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr165;
 st95:
 	if ( ++p == pe )
 		goto _test_eof95;
 case 95:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st96;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 104: goto st96;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st96:
 	if ( ++p == pe )
 		goto _test_eof96;
 case 96:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 105: goto st97;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st97;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st97:
 	if ( ++p == pe )
 		goto _test_eof97;
 case 97:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 99: goto st98;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st98;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st98:
 	if ( ++p == pe )
 		goto _test_eof98;
 case 98:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st99;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 105: goto st99;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st99:
 	if ( ++p == pe )
 		goto _test_eof99;
 case 99:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 108: goto st100;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 99: goto st100;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st100:
 	if ( ++p == pe )
 		goto _test_eof100;
 case 100:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 84: goto st101;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st101;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st101:
 	if ( ++p == pe )
 		goto _test_eof101;
 case 101:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st102;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 108: goto st102;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st102:
 	if ( ++p == pe )
 		goto _test_eof102;
 case 102:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto st103;
+		case 46: goto tr73;
+		case 84: goto st103;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st103:
 	if ( ++p == pe )
 		goto _test_eof103;
 case 103:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st104;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st104;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st104:
 	if ( ++p == pe )
 		goto _test_eof104;
 case 104:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st105;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto st105;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st105:
 	if ( ++p == pe )
 		goto _test_eof105;
 case 105:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto tr174;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st106;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st106:
 	if ( ++p == pe )
 		goto _test_eof106;
 case 106:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st107;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st107;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st107:
 	if ( ++p == pe )
 		goto _test_eof107;
 case 107:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 116: goto tr177;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto tr179;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr176;
+		goto tr73;
+	goto tr72;
 st108:
 	if ( ++p == pe )
 		goto _test_eof108;
 case 108:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 109: goto tr178;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st109;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st109:
 	if ( ++p == pe )
 		goto _test_eof109;
 case 109:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 109: goto st110;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 116: goto tr182;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr181;
 st110:
 	if ( ++p == pe )
 		goto _test_eof110;
 case 110:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 109: goto st111;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 109: goto tr183;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st111:
 	if ( ++p == pe )
 		goto _test_eof111;
 case 111:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 84: goto st112;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 109: goto st112;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st112:
 	if ( ++p == pe )
 		goto _test_eof112;
 case 112:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st113;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 109: goto st113;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st113:
 	if ( ++p == pe )
 		goto _test_eof113;
 case 113:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto st114;
+		case 46: goto tr73;
+		case 84: goto st114;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st114:
 	if ( ++p == pe )
 		goto _test_eof114;
 case 114:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st115;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st115;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st115:
 	if ( ++p == pe )
 		goto _test_eof115;
 case 115:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st116;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto st116;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st116:
 	if ( ++p == pe )
 		goto _test_eof116;
 case 116:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto tr186;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st117;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st117:
 	if ( ++p == pe )
 		goto _test_eof117;
 case 117:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st118;
-		case 101: goto st120;
-		case 105: goto st125;
-		case 114: goto st127;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st118;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st118:
 	if ( ++p == pe )
 		goto _test_eof118;
 case 118:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 110: goto st119;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto tr191;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st119:
 	if ( ++p == pe )
 		goto _test_eof119;
 case 119:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 104: goto tr193;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st120;
+		case 101: goto st122;
+		case 105: goto st127;
+		case 114: goto st129;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr192;
+		goto tr73;
+	goto tr72;
 st120:
 	if ( ++p == pe )
 		goto _test_eof120;
 case 120:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
 		case 110: goto st121;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st121:
 	if ( ++p == pe )
 		goto _test_eof121;
 case 121:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 115: goto st122;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 104: goto tr198;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr197;
 st122:
 	if ( ++p == pe )
 		goto _test_eof122;
 case 122:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st123;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 110: goto st123;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st123:
 	if ( ++p == pe )
 		goto _test_eof123;
 case 123:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto tr197;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 115: goto st124;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
-tr197:
-#line 1 "NONE"
-	{te = p+1;}
-	goto st124;
+		goto tr73;
+	goto tr72;
 st124:
 	if ( ++p == pe )
 		goto _test_eof124;
 case 124:
-#line 3212 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 58: goto st8;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st125;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr198;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 58 )
-		goto st9;
-	goto tr9;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 73 )
-		goto tr11;
-	goto tr9;
+		goto tr73;
+	goto tr72;
 st125:
 	if ( ++p == pe )
 		goto _test_eof125;
 case 125:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 109: goto st126;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto tr202;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
+tr202:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st126;
 st126:
 	if ( ++p == pe )
 		goto _test_eof126;
 case 126:
+#line 3256 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto tr201;
+		case 46: goto tr73;
+		case 58: goto st8;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr203;
+st8:
+	if ( ++p == pe )
+		goto _test_eof8;
+case 8:
+	if ( (*p) == 58 )
+		goto st9;
+	goto tr9;
+st9:
+	if ( ++p == pe )
+		goto _test_eof9;
+case 9:
+	if ( (*p) == 73 )
+		goto tr11;
+	goto tr9;
 st127:
 	if ( ++p == pe )
 		goto _test_eof127;
 case 127:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 117: goto st128;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 109: goto st128;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st128:
 	if ( ++p == pe )
 		goto _test_eof128;
 case 128:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto tr203;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto tr206;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st129:
 	if ( ++p == pe )
 		goto _test_eof129;
 case 129:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st130;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 117: goto st130;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st130:
 	if ( ++p == pe )
 		goto _test_eof130;
 case 130:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 99: goto st131;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto tr208;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st131:
 	if ( ++p == pe )
 		goto _test_eof131;
 case 131:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 116: goto st132;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st132;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st132:
 	if ( ++p == pe )
 		goto _test_eof132;
 case 132:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 111: goto st133;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 99: goto st133;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st133:
 	if ( ++p == pe )
 		goto _test_eof133;
 case 133:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto tr208;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 116: goto st134;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st134:
 	if ( ++p == pe )
 		goto _test_eof134;
 case 134:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st135;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 111: goto st135;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st135:
 	if ( ++p == pe )
 		goto _test_eof135;
 case 135:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 105: goto st136;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto tr213;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
+tr213:
+#line 1 "NONE"
+	{te = p+1;}
+	goto st136;
 st136:
 	if ( ++p == pe )
 		goto _test_eof136;
 case 136:
+#line 3455 "volumeExprScanner.cc"
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st137;
+		case 46: goto tr73;
+		case 58: goto st10;
+		case 95: goto tr73;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr214;
+st10:
+	if ( ++p == pe )
+		goto _test_eof10;
+case 10:
+	if ( (*p) == 58 )
+		goto st11;
+	goto tr12;
+st11:
+	if ( ++p == pe )
+		goto _test_eof11;
+case 11:
+	switch( (*p) ) {
+		case 120: goto tr14;
+		case 121: goto tr15;
+		case 122: goto tr16;
+	}
+	goto tr12;
 st137:
 	if ( ++p == pe )
 		goto _test_eof137;
 case 137:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 104: goto st138;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st138;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st138:
 	if ( ++p == pe )
 		goto _test_eof138;
 case 138:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 116: goto st139;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 105: goto st139;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st139:
 	if ( ++p == pe )
 		goto _test_eof139;
 case 139:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 65: goto st140;
-		case 83: goto st146;
-		case 95: goto tr68;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st140;
 	}
-	if ( (*p) < 66 ) {
+	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st140:
 	if ( ++p == pe )
 		goto _test_eof140;
 case 140:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 118: goto st141;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 104: goto st141;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st141:
 	if ( ++p == pe )
 		goto _test_eof141;
 case 141:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto st142;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 116: goto st142;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st142:
 	if ( ++p == pe )
 		goto _test_eof142;
 case 142:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 114: goto st143;
+		case 46: goto tr73;
+		case 65: goto st143;
+		case 83: goto st149;
+		case 95: goto tr73;
 	}
-	if ( (*p) < 65 ) {
+	if ( (*p) < 66 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st143:
 	if ( ++p == pe )
 		goto _test_eof143;
 case 143:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 97: goto st144;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 118: goto st144;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 98 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st144:
 	if ( ++p == pe )
 		goto _test_eof144;
 case 144:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 103: goto st145;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto st145;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st145:
 	if ( ++p == pe )
 		goto _test_eof145;
 case 145:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 101: goto tr221;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 114: goto st146;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st146:
 	if ( ++p == pe )
 		goto _test_eof146;
 case 146:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 117: goto st147;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 97: goto st147;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+		if ( 98 <= (*p) && (*p) <= 122 )
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
+		goto tr73;
+	goto tr72;
 st147:
 	if ( ++p == pe )
 		goto _test_eof147;
 case 147:
 	switch( (*p) ) {
-		case 46: goto tr68;
-		case 95: goto tr68;
-		case 109: goto tr223;
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 103: goto st148;
 	}
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr68;
+			goto tr73;
 	} else if ( (*p) > 90 ) {
 		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr68;
+			goto tr73;
 	} else
-		goto tr68;
-	goto tr67;
-st10:
+		goto tr73;
+	goto tr72;
+st148:
 	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
+		goto _test_eof148;
+case 148:
+	switch( (*p) ) {
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 101: goto tr228;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
+	} else
+		goto tr73;
+	goto tr72;
+st149:
+	if ( ++p == pe )
+		goto _test_eof149;
+case 149:
+	switch( (*p) ) {
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 117: goto st150;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
+	} else
+		goto tr73;
+	goto tr72;
+st150:
+	if ( ++p == pe )
+		goto _test_eof150;
+case 150:
+	switch( (*p) ) {
+		case 46: goto tr73;
+		case 95: goto tr73;
+		case 109: goto tr230;
+	}
+	if ( (*p) < 65 ) {
+		if ( 48 <= (*p) && (*p) <= 57 )
+			goto tr73;
+	} else if ( (*p) > 90 ) {
+		if ( 97 <= (*p) && (*p) <= 122 )
+			goto tr73;
+	} else
+		goto tr73;
+	goto tr72;
+st12:
+	if ( ++p == pe )
+		goto _test_eof12;
+case 12:
 	if ( (*p) == 124 )
-		goto tr12;
+		goto tr17;
 	goto st0;
 	}
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
 	_test_eof13: cs = 13; goto _test_eof; 
+	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof15: cs = 15; goto _test_eof; 
 	_test_eof1: cs = 1; goto _test_eof; 
 	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof16: cs = 16; goto _test_eof; 
 	_test_eof3: cs = 3; goto _test_eof; 
 	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof17: cs = 17; goto _test_eof; 
 	_test_eof18: cs = 18; goto _test_eof; 
+	_test_eof5: cs = 5; goto _test_eof; 
+	_test_eof6: cs = 6; goto _test_eof; 
 	_test_eof19: cs = 19; goto _test_eof; 
 	_test_eof20: cs = 20; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof21: cs = 21; goto _test_eof; 
 	_test_eof22: cs = 22; goto _test_eof; 
+	_test_eof7: cs = 7; goto _test_eof; 
 	_test_eof23: cs = 23; goto _test_eof; 
 	_test_eof24: cs = 24; goto _test_eof; 
 	_test_eof25: cs = 25; goto _test_eof; 
@@ -3781,10 +3863,10 @@ case 10:
 	_test_eof122: cs = 122; goto _test_eof; 
 	_test_eof123: cs = 123; goto _test_eof; 
 	_test_eof124: cs = 124; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof125: cs = 125; goto _test_eof; 
 	_test_eof126: cs = 126; goto _test_eof; 
+	_test_eof8: cs = 8; goto _test_eof; 
+	_test_eof9: cs = 9; goto _test_eof; 
 	_test_eof127: cs = 127; goto _test_eof; 
 	_test_eof128: cs = 128; goto _test_eof; 
 	_test_eof129: cs = 129; goto _test_eof; 
@@ -3795,6 +3877,8 @@ case 10:
 	_test_eof134: cs = 134; goto _test_eof; 
 	_test_eof135: cs = 135; goto _test_eof; 
 	_test_eof136: cs = 136; goto _test_eof; 
+	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof11: cs = 11; goto _test_eof; 
 	_test_eof137: cs = 137; goto _test_eof; 
 	_test_eof138: cs = 138; goto _test_eof; 
 	_test_eof139: cs = 139; goto _test_eof; 
@@ -3806,159 +3890,165 @@ case 10:
 	_test_eof145: cs = 145; goto _test_eof; 
 	_test_eof146: cs = 146; goto _test_eof; 
 	_test_eof147: cs = 147; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof148: cs = 148; goto _test_eof; 
+	_test_eof149: cs = 149; goto _test_eof; 
+	_test_eof150: cs = 150; goto _test_eof; 
+	_test_eof12: cs = 12; goto _test_eof; 
 
 	_test_eof: {}
 	if ( p == eof )
 	{
 	switch ( cs ) {
-	case 12: goto tr52;
-	case 13: goto tr53;
-	case 14: goto tr55;
-	case 15: goto tr57;
+	case 14: goto tr57;
+	case 15: goto tr58;
 	case 16: goto tr60;
+	case 17: goto tr62;
+	case 18: goto tr65;
 	case 5: goto tr5;
 	case 6: goto tr5;
-	case 17: goto tr60;
-	case 18: goto tr62;
-	case 19: goto tr60;
-	case 20: goto tr63;
+	case 19: goto tr65;
+	case 20: goto tr67;
 	case 21: goto tr65;
-	case 22: goto tr67;
-	case 23: goto tr69;
-	case 24: goto tr67;
-	case 25: goto tr67;
-	case 26: goto tr67;
-	case 27: goto tr67;
-	case 28: goto tr67;
-	case 29: goto tr67;
-	case 30: goto tr67;
-	case 31: goto tr67;
-	case 32: goto tr67;
-	case 33: goto tr67;
-	case 34: goto tr67;
-	case 35: goto tr85;
-	case 36: goto tr67;
-	case 37: goto tr67;
-	case 38: goto tr67;
-	case 39: goto tr67;
-	case 40: goto tr67;
-	case 41: goto tr67;
-	case 42: goto tr67;
-	case 43: goto tr67;
-	case 44: goto tr67;
-	case 45: goto tr67;
-	case 46: goto tr67;
-	case 47: goto tr67;
-	case 48: goto tr100;
-	case 49: goto tr67;
-	case 50: goto tr67;
-	case 51: goto tr67;
-	case 52: goto tr67;
-	case 53: goto tr67;
-	case 54: goto tr67;
-	case 55: goto tr67;
-	case 56: goto tr67;
-	case 57: goto tr67;
-	case 58: goto tr67;
-	case 59: goto tr67;
-	case 60: goto tr67;
-	case 61: goto tr67;
-	case 62: goto tr67;
-	case 63: goto tr67;
-	case 64: goto tr67;
-	case 65: goto tr67;
-	case 66: goto tr67;
-	case 67: goto tr121;
-	case 68: goto tr67;
-	case 69: goto tr67;
-	case 70: goto tr67;
-	case 71: goto tr128;
-	case 72: goto tr67;
-	case 73: goto tr67;
-	case 74: goto tr67;
-	case 75: goto tr67;
-	case 76: goto tr67;
-	case 77: goto tr135;
-	case 78: goto tr67;
-	case 79: goto tr67;
-	case 80: goto tr141;
-	case 81: goto tr67;
-	case 82: goto tr67;
-	case 83: goto tr67;
-	case 84: goto tr67;
-	case 85: goto tr67;
-	case 86: goto tr67;
-	case 87: goto tr67;
-	case 88: goto tr67;
-	case 89: goto tr67;
-	case 90: goto tr67;
-	case 91: goto tr67;
-	case 92: goto tr160;
-	case 93: goto tr67;
-	case 94: goto tr67;
-	case 95: goto tr67;
-	case 96: goto tr67;
-	case 97: goto tr67;
-	case 98: goto tr67;
-	case 99: goto tr67;
-	case 100: goto tr67;
-	case 101: goto tr67;
-	case 102: goto tr67;
-	case 103: goto tr67;
-	case 104: goto tr67;
-	case 105: goto tr67;
-	case 106: goto tr67;
-	case 107: goto tr176;
-	case 108: goto tr67;
-	case 109: goto tr67;
-	case 110: goto tr67;
-	case 111: goto tr67;
-	case 112: goto tr67;
-	case 113: goto tr67;
-	case 114: goto tr67;
-	case 115: goto tr67;
-	case 116: goto tr67;
-	case 117: goto tr67;
-	case 118: goto tr67;
-	case 119: goto tr192;
-	case 120: goto tr67;
-	case 121: goto tr67;
-	case 122: goto tr67;
-	case 123: goto tr67;
-	case 124: goto tr198;
+	case 22: goto tr68;
+	case 23: goto tr70;
+	case 24: goto tr72;
+	case 25: goto tr74;
+	case 26: goto tr72;
+	case 27: goto tr72;
+	case 28: goto tr72;
+	case 29: goto tr72;
+	case 30: goto tr72;
+	case 31: goto tr72;
+	case 32: goto tr72;
+	case 33: goto tr72;
+	case 34: goto tr72;
+	case 35: goto tr72;
+	case 36: goto tr72;
+	case 37: goto tr90;
+	case 38: goto tr72;
+	case 39: goto tr72;
+	case 40: goto tr72;
+	case 41: goto tr72;
+	case 42: goto tr72;
+	case 43: goto tr72;
+	case 44: goto tr72;
+	case 45: goto tr72;
+	case 46: goto tr72;
+	case 47: goto tr72;
+	case 48: goto tr72;
+	case 49: goto tr72;
+	case 50: goto tr105;
+	case 51: goto tr72;
+	case 52: goto tr72;
+	case 53: goto tr72;
+	case 54: goto tr72;
+	case 55: goto tr72;
+	case 56: goto tr72;
+	case 57: goto tr72;
+	case 58: goto tr72;
+	case 59: goto tr72;
+	case 60: goto tr72;
+	case 61: goto tr72;
+	case 62: goto tr72;
+	case 63: goto tr72;
+	case 64: goto tr72;
+	case 65: goto tr72;
+	case 66: goto tr72;
+	case 67: goto tr72;
+	case 68: goto tr72;
+	case 69: goto tr126;
+	case 70: goto tr72;
+	case 71: goto tr72;
+	case 72: goto tr72;
+	case 73: goto tr133;
+	case 74: goto tr72;
+	case 75: goto tr72;
+	case 76: goto tr72;
+	case 77: goto tr72;
+	case 78: goto tr72;
+	case 79: goto tr140;
+	case 80: goto tr72;
+	case 81: goto tr72;
+	case 82: goto tr146;
+	case 83: goto tr72;
+	case 84: goto tr72;
+	case 85: goto tr72;
+	case 86: goto tr72;
+	case 87: goto tr72;
+	case 88: goto tr72;
+	case 89: goto tr72;
+	case 90: goto tr72;
+	case 91: goto tr72;
+	case 92: goto tr72;
+	case 93: goto tr72;
+	case 94: goto tr165;
+	case 95: goto tr72;
+	case 96: goto tr72;
+	case 97: goto tr72;
+	case 98: goto tr72;
+	case 99: goto tr72;
+	case 100: goto tr72;
+	case 101: goto tr72;
+	case 102: goto tr72;
+	case 103: goto tr72;
+	case 104: goto tr72;
+	case 105: goto tr72;
+	case 106: goto tr72;
+	case 107: goto tr72;
+	case 108: goto tr72;
+	case 109: goto tr181;
+	case 110: goto tr72;
+	case 111: goto tr72;
+	case 112: goto tr72;
+	case 113: goto tr72;
+	case 114: goto tr72;
+	case 115: goto tr72;
+	case 116: goto tr72;
+	case 117: goto tr72;
+	case 118: goto tr72;
+	case 119: goto tr72;
+	case 120: goto tr72;
+	case 121: goto tr197;
+	case 122: goto tr72;
+	case 123: goto tr72;
+	case 124: goto tr72;
+	case 125: goto tr72;
+	case 126: goto tr203;
 	case 8: goto tr9;
 	case 9: goto tr9;
-	case 125: goto tr67;
-	case 126: goto tr67;
-	case 127: goto tr67;
-	case 128: goto tr67;
-	case 129: goto tr67;
-	case 130: goto tr67;
-	case 131: goto tr67;
-	case 132: goto tr67;
-	case 133: goto tr67;
-	case 134: goto tr67;
-	case 135: goto tr67;
-	case 136: goto tr67;
-	case 137: goto tr67;
-	case 138: goto tr67;
-	case 139: goto tr67;
-	case 140: goto tr67;
-	case 141: goto tr67;
-	case 142: goto tr67;
-	case 143: goto tr67;
-	case 144: goto tr67;
-	case 145: goto tr67;
-	case 146: goto tr67;
-	case 147: goto tr67;
+	case 127: goto tr72;
+	case 128: goto tr72;
+	case 129: goto tr72;
+	case 130: goto tr72;
+	case 131: goto tr72;
+	case 132: goto tr72;
+	case 133: goto tr72;
+	case 134: goto tr72;
+	case 135: goto tr72;
+	case 136: goto tr214;
+	case 10: goto tr12;
+	case 11: goto tr12;
+	case 137: goto tr72;
+	case 138: goto tr72;
+	case 139: goto tr72;
+	case 140: goto tr72;
+	case 141: goto tr72;
+	case 142: goto tr72;
+	case 143: goto tr72;
+	case 144: goto tr72;
+	case 145: goto tr72;
+	case 146: goto tr72;
+	case 147: goto tr72;
+	case 148: goto tr72;
+	case 149: goto tr72;
+	case 150: goto tr72;
 	}
 	}
 
 	_out: {}
 	}
 
-#line 692 "volumeExprScanner.rl"
+#line 722 "volumeExprScanner.rl"
    /* ^^^ FSM execution here ^^^ */;
 
     if (0 == cs)
@@ -3972,7 +4062,7 @@ case 10:
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)
diff --git a/src/finiteVolume/expressions/volume/volumeExprScanner.rl b/src/finiteVolume/expressions/volume/volumeExprScanner.rl
index a1538290052b2b4c2bbbaa2c635c25434f3c786b..03b4e93c7b5161bf53f89b02d98333dd4ac1d247 100644
--- a/src/finiteVolume/expressions/volume/volumeExprScanner.rl
+++ b/src/finiteVolume/expressions/volume/volumeExprScanner.rl
@@ -42,7 +42,6 @@ Description
 #undef  DebugInfo
 #define DebugInfo if (debug & 0x2) InfoErr
 
-
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 namespace Foam
@@ -55,22 +54,20 @@ namespace Foam
 #define TOKEN_PAIR(Name,T)  { TOKEN_OF(T), Name }
 
 //- An {int, c_str} enum pairing for field types
-#define FIELD_PAIR(Fld,T)  { TOKEN_OF(T), Fld::typeName.c_str() }
+#define FIELD_PAIR(Fld,T)   { TOKEN_OF(T), Fld::typeName.c_str() }
 
 
 // Special handling for these known (stashed) look-back types
+#define HAS_LOOKBEHIND_TOKENS
 static const Enum<int> lookBehindTokenEnums
 ({
-    TOKEN_PAIR("cellSet", CELL_SET),
-    TOKEN_PAIR("faceSet", FACE_SET),
-    TOKEN_PAIR("pointSet", POINT_SET),
-    TOKEN_PAIR("cellZone", CELL_ZONE),
-    TOKEN_PAIR("faceZone", FACE_ZONE),
-    TOKEN_PAIR("pointZone", POINT_ZONE),
+    TOKEN_PAIR("cellZone", CELL_ZONE), TOKEN_PAIR("cellSet", CELL_SET),
+    TOKEN_PAIR("faceZone", FACE_ZONE), TOKEN_PAIR("faceSet", FACE_SET),
+    #ifdef TOK_POINT_ZONE
+    TOKEN_PAIR("pointZone", POINT_ZONE), TOKEN_PAIR("pointSet", POINT_SET),
+    #endif
 });
 
-#define HAS_LOOKBEHIND_TOKENS
-
 
 // Special handling of predefined method types. Eg, .x(), .y(), ...
 static const Enum<int> fieldMethodEnums
@@ -192,6 +189,7 @@ static int driverTokenType
     const word& ident
 )
 {
+    #ifdef HAS_LOOKBEHIND_TOKENS
     // Get stashed "look-behind" to decide what type of identifier we expect
     const int lookBehind = driver_.resetStashedTokenId();
 
@@ -201,12 +199,16 @@ static int driverTokenType
 
         switch (lookBehind)
         {
-            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
-            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
-            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
             case TOK_CELL_ZONE : good = driver_.isCellZone(ident); break;
+            case TOK_CELL_SET : good = driver_.isCellSet(ident); break;
+
             case TOK_FACE_ZONE : good = driver_.isFaceZone(ident); break;
+            case TOK_FACE_SET : good = driver_.isFaceSet(ident); break;
+
+            #ifdef TOK_POINT_ZONE
             case TOK_POINT_ZONE : good = driver_.isPointZone(ident); break;
+            case TOK_POINT_SET : good = driver_.isPointSet(ident); break;
+            #endif
         }
 
         if (good)
@@ -222,65 +224,67 @@ static int driverTokenType
 
         return -2;  // Extra safety
     }
+    #endif
 
     // Surface variables - distinguish from volume by size
     #ifdef TOK_SSCALAR_ID
     {
         const label len = driver_.mesh().nInternalFaces();
 
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false, len))                      \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false, len))            \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SSCALAR_ID, scalar);
-        checkFieldToken(TOK_SVECTOR_ID, vector);
-        checkFieldToken(TOK_SSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_SSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_STENSOR_ID, tensor);
+        doLocalCode(TOK_SSCALAR_ID, scalar);
+        doLocalCode(TOK_SVECTOR_ID, vector);
+        doLocalCode(TOK_SSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_SSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_STENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
     // Point variables
     #ifdef TOK_PSCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, true))                            \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, true))                  \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_PSCALAR_ID, scalar);
-        checkFieldToken(TOK_PVECTOR_ID, vector);
-        checkFieldToken(TOK_PSPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_PSYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_PTENSOR_ID, tensor);
+        doLocalCode(TOK_PSCALAR_ID, scalar);
+        doLocalCode(TOK_PVECTOR_ID, vector);
+        doLocalCode(TOK_PSPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_PSYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_PTENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
     // Volume variables
     #ifdef TOK_SCALAR_ID
     {
-        #undef checkFieldToken
-        #define checkFieldToken(TokType, Type)                                \
-        if (driver_.isVariable<Type>(ident, false))                           \
-        {                                                                     \
-            return TokType;                                                   \
+        #undef  doLocalCode
+        #define doLocalCode(TokType, Type)                          \
+        if (driver_.isVariable<Type>(ident, false))                 \
+        {                                                           \
+            return TokType;                                         \
         }
 
-        checkFieldToken(TOK_SCALAR_ID, scalar);
-        checkFieldToken(TOK_VECTOR_ID, vector);
-        checkFieldToken(TOK_SPH_TENSOR_ID, sphericalTensor);
-        checkFieldToken(TOK_SYM_TENSOR_ID, symmTensor);
-        checkFieldToken(TOK_TENSOR_ID, tensor);
+        doLocalCode(TOK_SCALAR_ID, scalar);
+        doLocalCode(TOK_VECTOR_ID, vector);
+        doLocalCode(TOK_SPH_TENSOR_ID, sphericalTensor);
+        doLocalCode(TOK_SYM_TENSOR_ID, symmTensor);
+        doLocalCode(TOK_TENSOR_ID, tensor);
+        #undef doLocalCode
     }
     #endif
 
-    #undef checkFieldToken
-
     // Check registered fields and/or disk-files
     {
         const word fieldType(driver_.getFieldClassName(ident));
@@ -296,7 +300,7 @@ static int driverTokenType
     return -1;
 }
 
-} // End anonymous namespace
+} // End namespace Foam
 
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -309,7 +313,16 @@ static int driverTokenType
 #define EMIT_TOKEN(T)                                                         \
     driver_.parsePosition() = (ts-buf);                                       \
     DebugInfo<< STRINGIFY(T) << " at " << driver_.parsePosition() << nl;      \
-    parser_->parse(TOKEN_OF(T), nullptr);                                     \
+    parser_->parse(TOKEN_OF(T));                                              \
+    driver_.parsePosition() = (p-buf);
+
+
+#define EMIT_VECTOR_TOKEN(X, Y, Z)                                            \
+    driver_.parsePosition() = (ts-buf);                                       \
+    DebugInfo<< "VECTOR at " << driver_.parsePosition() << nl;                \
+    scanToken scanTok;                                                        \
+    scanTok.setVector(X,Y,Z);                                                 \
+    parser_->parse(TOK_VECTOR_VALUE, scanTok);                                \
     driver_.parsePosition() = (p-buf);
 
 
@@ -318,15 +331,18 @@ static int driverTokenType
     write   data;
 
     action emit_number {
+        // Emit number
         driver_.parsePosition() = (ts-buf);
 
         DebugInfo
             << "Number:" << std::string(ts, te-ts).c_str()
             << " at " << driver_.parsePosition() << nl;
 
-        if (readScalar(std::string(ts, te-ts), scanTok.svalue))
+        scanToken scanTok;
+        scanTok.setScalar(0);
+        if (readScalar(std::string(ts, te-ts), scanTok.scalarValue))
         {
-            parser_->parse(TOKEN_OF(NUMBER), &scanTok);
+            parser_->parse(TOKEN_OF(NUMBER), scanTok);
         }
         else
         {
@@ -340,15 +356,16 @@ static int driverTokenType
     }
 
     action emit_ident {
+        // Emit identifier
         driver_.parsePosition() = (ts-buf);
-        dispatch_ident(driver_, scanTok, word(ts, te-ts, false));
+        dispatch_ident(driver_, word(ts, te-ts, false));
         driver_.parsePosition() = (p-buf);
     }
 
     action emit_method {
         // Tokenized ".method" - dispatch '.' and "method" separately
         driver_.parsePosition() = (ts-buf);
-        dispatch_method(driver_, scanTok, word(ts+1, te-ts-1, false));
+        dispatch_method(driver_, word(ts+1, te-ts-1, false));
         driver_.parsePosition() = (p-buf);
     }
 
@@ -366,7 +383,7 @@ static int driverTokenType
     number => emit_number;
 
     ## Operators
-    '!'  =>{ EMIT_TOKEN(NOT); };
+    '!'  =>{ EMIT_TOKEN(LNOT); };
     '%'  =>{ EMIT_TOKEN(PERCENT); };
     '('  =>{ EMIT_TOKEN(LPAREN); };
     ')'  =>{ EMIT_TOKEN(RPAREN); };
@@ -387,7 +404,7 @@ static int driverTokenType
     '&&' =>{ EMIT_TOKEN(LAND); };
     '||' =>{ EMIT_TOKEN(LOR); };
     '&'  =>{ EMIT_TOKEN(BIT_AND); };
-## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OK); };
+## Not needed?  '|'  =>{ EMIT_TOKEN(BIT_OR); };
     '^'  =>{ EMIT_TOKEN(BIT_XOR); };
 
     ## Some '.method' - Error if unknown
@@ -441,9 +458,12 @@ static int driverTokenType
     "sphericalTensor" =>{ EMIT_TOKEN(SPH_TENSOR); };
 
     ## Single value (constants, etc)
-    "Zero"      =>{ EMIT_TOKEN(ZERO); };
     "true"      =>{ EMIT_TOKEN(LTRUE); };
     "false"     =>{ EMIT_TOKEN(LFALSE); };
+    "Zero"      =>{ EMIT_TOKEN(ZERO); };
+    "vector::x" =>{ EMIT_VECTOR_TOKEN(1,0,0); };
+    "vector::y" =>{ EMIT_VECTOR_TOKEN(0,1,0); };
+    "vector::z" =>{ EMIT_VECTOR_TOKEN(0,0,1); };
     "tensor::I" =>{ EMIT_TOKEN(IDENTITY_TENSOR); };
     "arg"       =>{ EMIT_TOKEN(ARG); };
     "time"      =>{ EMIT_TOKEN(TIME); };
@@ -476,8 +496,7 @@ Foam::expressions::volumeExpr::scanner::~scanner()
 bool Foam::expressions::volumeExpr::scanner::dispatch_method
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
     if (ident[0] == '.')
@@ -494,8 +513,8 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_method
     if (methType > 0)
     {
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -508,10 +527,11 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_method
 bool Foam::expressions::volumeExpr::scanner::dispatch_ident
 (
     const parseDriver& driver_,
-    scanToken& scanTok,
-    word&& ident
+    word ident
 ) const
 {
+    // Peek at stashed "look-behind". It may influence decisions
+    int lookBehindTok = driver_.stashedTokenId();
     int tokType = -1;
 
     const bool quoted =
@@ -536,12 +556,12 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
                 << "Emit:" << ident << " function:"
                 << parser_->tokenName(tokType) << nl;
 
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
 
         #ifdef HAS_LOOKBEHIND_TOKENS
-        // Specials such "cset" also reset the look-behind
+        // Specials such "cellSet" etc also reset the look-behind
         tokType = lookBehindTokenEnums.lookup(ident, -1);
 
         if (tokType > 0)
@@ -551,17 +571,28 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
                 << parser_->tokenName(tokType) << nl;
 
             driver_.resetStashedTokenId(tokType);
-            parser_->parse(tokType, nullptr);
+            parser_->parse(tokType);
             return true;
         }
         #endif
     }
 
+    // Functions: scalar, vector, probably don't need others
+    // - "fn:" prefix to avoid any ambiguities
+    if (lookBehindTok <= 0 && ident.starts_with("fn:"))
+    {
+        word funcName(ident.substr(3));  // strip prefix
 
-    // Can also peek at stashed "look-behind"
-    // const int lookBehind = driver_.stashedTokenId();
+        do
+        {
+        }
+        while (false);
+    }
 
-    tokType = driverTokenType(driver_, ident);
+    if (tokType <= 0)
+    {
+        tokType = driverTokenType(driver_, ident);
+    }
 
     if (tokType > 0)
     {
@@ -569,8 +600,9 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
             << "Emit:" << ident << " token:"
             << parser_->tokenName(tokType) << nl;
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         return true;
     }
@@ -602,12 +634,13 @@ bool Foam::expressions::volumeExpr::scanner::dispatch_ident
         // The field (before the ".")
         ident.erase(dot);
 
-        scanTok.name = new Foam::word(std::move(ident));
-        parser_->parse(tokType, &scanTok);
+        scanToken scanTok;
+        scanTok.setWord(ident);
+        parser_->parse(tokType, scanTok);
 
         // Dispatch '.' and "method" separately
-        parser_->parse(TOK_DOT, nullptr);
-        parser_->parse(methType, nullptr);
+        parser_->parse(TOK_DOT);
+        parser_->parse(methType);
 
         return true;
     }
@@ -670,9 +703,6 @@ bool Foam::expressions::volumeExpr::scanner::process
 
     parser_->start(driver_);
 
-    // Scan token type
-    scanToken scanTok;
-
     // Token start/end (Ragel naming)
     const char* ts;
     const char* te;
@@ -702,7 +732,7 @@ bool Foam::expressions::volumeExpr::scanner::process
     }
 
     // Terminate parser execution
-    parser_->parse(0, nullptr);
+    parser_->parse(0);
     parser_->stop();
 
     if (debug & 0x6)