-syn match factorInt /\<[+-]\=[0-9]\([0-9,]*[0-9]\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\>/
-syn match factorFloat /\<[+-]\=\([0-9,]*[0-9]\)\?\(\.\(\([0-9,]*[0-9]\+\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\)\?\)\?\>/
-syn match factorPosRatio /\<+\=[0-9]\([0-9,]*[0-9]\)\?\(+[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
-syn match factorNegRatio /\<\-[0-9]\([0-9,]*[0-9]\)\?\(\-[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
-syn region factorComplex start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
-syn match factorBinErr /\<[+-]\=0b[01,]*[^01 ]\S*\>/
-syn match factorBinary /\<[+-]\=0b[01,]\+\>/
-syn match factorHexErr /\<[+-]\=0x\(,\S*\|\S*,\|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*\)\>/
-syn match factorHex /\<[+-]\=0x[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\(\.[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\)\?\(p-\=[0-9]\([0-9,]*[0-9]\)\?\)\?\>/
-syn match factorOctErr /\<[+-]\=0o\(,\S*\|\S*,\|[0-7,]*[^0-7, ]\S*\)\>/
-syn match factorOctal /\<[+-]\=0o[0-7,]\+\>/
-syn match factorNan /\<NAN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/ contains=factorComment
-
-syn match factorIn /\<IN:\s\+\S\+\>/ contains=factorComment
-syn match factorUse /\<USE:\s\+\S\+\>/ contains=factorComment
-syn match factorUnuse /\<UNUSE:\s\+\S\+\>/ contains=factorComment
-
-syn match factorChar /\<CHAR:\s\+\S\+\>/
-
-syn match factorBackslash /\<\\\>\s\+\S\+\>/ contains=factorComment
-syn match factorMBackslash /\<M\\\>\s\+\S\+\s\+\S\+\>/ contains=factorComment
-syn match factorLiteral /\<\$\>\s\+\S\+\>/ contains=factorComment
-syn region factorLiteralBlock start=/\<\$\[\>/ end=/\<\]\>/ contains=factorComment
-
-syn region factorUsing start=/\<USING:\>/ end=/;/ contains=factorComment
-syn match factorQualified /\<QUALIFIED:\s\+\S\+\>/ contains=factorComment
-syn match factorQualifiedWith /\<QUALIFIED-WITH:\s\+\S\+\s\+\S\+\>/ contains=factorComment
-syn region factorExclude start=/\<EXCLUDE:\>/ end=/;/ contains=factorComment
-syn region factorFrom start=/\<FROM:\>/ end=/;/ contains=factorComment
-syn match factorRename /\<RENAME:\s\+\S\+\s\+\S\+\s=>\s\+\S\+\>/ contains=factorComment
-syn region factorSingletons start=/\<SINGLETONS:\>/ end=/;/ contains=factorComment
-syn match factorSymbol /\<SYMBOL:\s\+\S\+\>/ contains=factorComment
-syn region factorSymbols start=/\<SYMBOLS:\>/ end=/;/ contains=factorComment
-syn region factorConstructor2 start=/\<CONSTRUCTOR:\?/ end=/;/ contains=factorComment
-syn region factorIntersection start=/\<INTERSECTION:\>/ end=/\<;\>/ contains=factorComment
-syn region factorTuple start=/\<\(TUPLE\|BUILTIN\):\>/ end=/\<;\>/ contains=factorComment
-syn region factorError start=/\<ERROR:\>/ end=/\<;\>/ contains=factorComment
-syn region factorUnion start=/\<UNION:\>/ end=/\<;\>/ contains=factorComment
-syn region factorStruct start=/\<\(UNION-STRUCT:\|STRUCT:\)\>/ end=/\<;\>/ contains=factorComment
-
-syn match factorConstant /\<CONSTANT:\s\+\S\+\>/ contains=factorComment
-syn match factorAlias /\<ALIAS:\s\+\S\+\s\+\S\+\>/ contains=factorComment
-syn match factorSingleton /\<SINGLETON:\s\+\S\+\>/ contains=factorComment
-syn match factorPostpone /\<POSTPONE:\s\+\S\+\>/ contains=factorComment
-syn match factorDefer /\<DEFER:\s\+\S\+\>/ contains=factorComment
-syn match factorForget /\<FORGET:\s\+\S\+\>/ contains=factorComment
-syn match factorMixin /\<MIXIN:\s\+\S\+\>/ contains=factorComment
-syn match factorInstance /\<INSTANCE:\s\+\S\+\s\+\S\+\>/ contains=factorComment
-syn match factorHook /\<HOOK:\s\+\S\+\s\+\S\+\>/ contains=factorComment nextgroup=factorStackEffect skipwhite skipempty
-syn match factorMain /\<MAIN:\s\+\S\+\>/ contains=factorComment
-syn match factorConstructor /\<C:\s\+\S\+\s\+\S\+\>/ contains=factorComment
-syn match factorAlien /\<ALIEN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/ contains=factorComment
-syn match factorSlot /\<SLOT:\s\+\S\+\>/ contains=factorComment
+syn match factorInt /\v<[+-]=[0-9]([0-9,]*[0-9])?([eE]([+-])?[0-9]+)?>/
+syn match factorFloat /\v<[+-]=([0-9,]*[0-9])?(\.(([0-9,]*[0-9]+)?([eE]([+-])?[0-9]+)?)?)?>/
+syn match factorPosRatio /\v<\+=[0-9]([0-9,]*[0-9])?(\+[0-9]([0-9,]*[0-9]+)?)?\/-=[0-9]([0-9,]*[0-9]+)?\.?>/
+syn match factorNegRatio /\v<\-[0-9]([0-9,]*[0-9])?(\-[0-9]([0-9,]*[0-9]+)?)?\/-=[0-9]([0-9,]*[0-9]+)?\.?>/
+syn region factorComplex start=/\v<C\{>/ end=/\v<\}>/ contains=@factorReal
+syn match factorBinErr /\v<[+-]=0b[01,]*[^01 ]\S*>/
+syn match factorBinary /\v<[+-]=0b[01,]+>/
+syn match factorHexErr /\v<[+-]=0x(,\S*|\S*,|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*)>/
+syn match factorHex /\v<[+-]=0x[0-9a-fA-F]([0-9a-fA-F,]*[0-9a-fA-F])?(\.[0-9a-fA-F]([0-9a-fA-F,]*[0-9a-fA-F])?)?(p-=[0-9]([0-9,]*[0-9])?)?>/
+syn match factorOctErr /\v<[+-]=0o(,\S*|\S*,|[0-7,]*[^0-7, ]\S*)>/
+syn match factorOctal /\v<[+-]=0o[0-7,]+>/
+syn match factorNan /\v<NAN:\s+[0-9a-fA-F]([0-9a-fA-F,]*[0-9a-fA-F])?>/ contains=factorComment
+
+syn match factorIn /\v<IN:\s+\S+>/ contains=factorComment
+syn match factorUse /\v<USE:\s+\S+>/ contains=factorComment
+syn match factorUnuse /\v<UNUSE:\s+\S+>/ contains=factorComment
+
+syn match factorChar /\v<CHAR:\s+\S+>/
+
+syn match factorBackslash /\v<\\>\s+\S+>/ contains=factorComment
+syn match factorMBackslash /\v<M\\>\s+\S+\s+\S+>/ contains=factorComment
+syn match factorLiteral /\v<\$>\s+\S+>/ contains=factorComment
+syn region factorLiteralBlock start=/\v<\$\[>/ end=/\v<\]>/ contains=factorComment
+
+syn region factorUsing start=/\v<USING:>/ end=/\v;/ contains=factorComment
+syn match factorQualified /\v<QUALIFIED:\s+\S+>/ contains=factorComment
+syn match factorQualifiedWith /\v<QUALIFIED-WITH:\s+\S+\s+\S+>/ contains=factorComment
+syn region factorExclude start=/\v<EXCLUDE:>/ end=/\v;/ contains=factorComment
+syn region factorFrom start=/\v<FROM:>/ end=/\v;/ contains=factorComment
+syn match factorRename /\v<RENAME:\s+\S+\s+\S+\s\=\>\s+\S+>/ contains=factorComment
+syn region factorSingletons start=/\v<SINGLETONS:>/ end=/\v;/ contains=factorComment
+syn match factorSymbol /\v<SYMBOL:\s+\S+>/ contains=factorComment
+syn region factorSymbols start=/\v<SYMBOLS:>/ end=/\v;/ contains=factorComment
+syn region factorConstructor2 start=/\v<CONSTRUCTOR:?/ end=/\v;/ contains=factorComment
+syn region factorIntersection start=/\v<INTERSECTION:>/ end=/\v<;>/ contains=factorComment
+syn region factorTuple start=/\v<(TUPLE|BUILTIN):>/ end=/\v<;>/ contains=factorComment
+syn region factorError start=/\v<ERROR:>/ end=/\v<;>/ contains=factorComment
+syn region factorUnion start=/\v<UNION:>/ end=/\v<;>/ contains=factorComment
+syn region factorStruct start=/\v<(UNION-STRUCT:|STRUCT:)>/ end=/\v<;>/ contains=factorComment
+
+syn match factorConstant /\v<CONSTANT:\s+\S+>/ contains=factorComment
+syn match factorAlias /\v<ALIAS:\s+\S+\s+\S+>/ contains=factorComment
+syn match factorSingleton /\v<SINGLETON:\s+\S+>/ contains=factorComment
+syn match factorPostpone /\v<POSTPONE:\s+\S+>/ contains=factorComment
+syn match factorDefer /\v<DEFER:\s+\S+>/ contains=factorComment
+syn match factorForget /\v<FORGET:\s+\S+>/ contains=factorComment
+syn match factorMixin /\v<MIXIN:\s+\S+>/ contains=factorComment
+syn match factorInstance /\v<INSTANCE:\s+\S+\s+\S+>/ contains=factorComment
+syn match factorHook /\v<HOOK:\s+\S+\s+\S+>/ contains=factorComment nextgroup=factorStackEffect skipwhite skipempty
+syn match factorMain /\v<MAIN:\s+\S+>/ contains=factorComment
+syn match factorConstructor /\v<C:\s+\S+\s+\S+>/ contains=factorComment
+syn match factorAlien /\v<ALIEN:\s+[0-9a-fA-F]([0-9a-fA-F,]*[0-9a-fA-F])?>/ contains=factorComment
+syn match factorSlot /\v<SLOT:\s+\S+>/ contains=factorComment