diff --git syntaxes/01_Packages/Lisp/Lisp.sublime-syntax syntaxes/01_Packages/Lisp/Lisp.sublime-syntax
index 50e5dad3..44a9795d 100644
--- syntaxes/01_Packages/Lisp/Lisp.sublime-syntax
+++ syntaxes/01_Packages/Lisp/Lisp.sublime-syntax
@@ -1,11 +1,14 @@
 %YAML 1.2
 ---
-# http://www.sublimetext.com/docs/3/syntax.html
+# https://www.sublimetext.com/docs/syntax.html
 #
 # `Common Lisp` Language Reference:
-# http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
-#
+# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
+# https://www.lispworks.com/documentation/lw70/CLHS/Front/Contents.htm
 name: Lisp
+scope: source.lisp
+version: 2
+
 file_extensions:
   - lisp
   - cl
@@ -17,108 +20,2268 @@ file_extensions:
   - ss
   - lsp
   - fasl # Scheme dialect of Lisp
-scope: source.lisp
+  - sld  # Scheme r7rs library
+
+first_line_match: |-
+  (?xi:
+    ^ \s* ; .*? -\*- .*? \blisp\b .*? -\*-  # editorconfig
+  )
+
+###############################################################################
+
 contexts:
   main:
-    - include: comments
+    - include: statements
+
+  statements:
     - include: parens
+    - include: expressions
+    - match: \)
+      scope: invalid.illegal.stray-bracket-end.lisp
 
   expressions:
     - include: comments
     - include: numbers
-    - include: constants
     - include: strings
-    - include: variables
+    - include: annotations
+    - include: keywords
+    - include: quotes
+    - include: macros
+    - include: modifiers
+    - include: identifiers
+
+###[ COMMENTS ]################################################################
+
+  comments:
+    - include: line-comments
+    - include: block-comments
+    - match: \|#
+      scope: invalid.illegal.stray-comment-end.lisp
+
+  block-comments:
+    - match: '#\|'
+      scope: punctuation.definition.comment.begin.lisp
+      push: block-comment-body
+
+  block-comment-body:
+    - meta_scope: comment.block.lisp
+    - match: '\|#'
+      scope: punctuation.definition.comment.end.lisp
+      pop: 1
+    - include: block-comments
+
+  line-comments:
+    - match: ;+
+      scope: punctuation.definition.comment.lisp
+      push: line-comment-body
+
+  line-comment-body:
+    - meta_scope: comment.line.semicolon.lisp
+    - match: $\n?
+      pop: 1
+
+###[ PARENTHESES ]#############################################################
+
+  parens:
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push:
+        - paren-body
+        - paren-begin
+
+  paren-begin:
+    - include: class-declaration
+    - include: function-declaration
+    - include: macro-declaration
+    - include: struct-declaration
+    - include: type-declaration
+    - include: variable-declaration
+    - include: other-declaration
+    - include: declare
     - include: control
-    - include: functions
-    - include: operators
+    - include: loop
+    - include: operator
+    - include: quote
+    - include: namespaces
+    - include: builtin-function
+    - include: other-function
+    - include: comments
+    - include: else-pop
 
-  variables:
-    - match: (\*)(?i:trace-output|terminal-io|suppress-series-warnings|standard-output|standard-input|readtable|read-suppress|read-eval|read-default-float-format|read-base|random-state|query-io|print-right-margin|print-readably|print-radix|print-pretty|print-pprint-dispatch|print-miser-width|print-lines|print-level|print-length|print-gensym|print-escape|print-circle|print-case|print-base|print-array|package|modules|macroexpand-hook|load-verbose|load-truename|load-print|load-pathname|gensym-counter|features|evalhook|error-output|default-pathname-defaults|debugger-hook|debug-io|compile-verbose|compile-print|compile-file-truename|compile-file-pathname|break-on-warnings|break-on-signals|applyhook)(\*)
-      scope: variable.language.lisp
+  paren-body:
+    - meta_scope: meta.parens.lisp
+    - include: paren-end
+    - include: parens
+    - include: expressions
+
+  paren-end:
+    - meta_include_prototype: false
+    - meta_scope: meta.parens.lisp
+    - match: \)
+      scope: punctuation.section.parens.end.lisp
+      pop: 1
+
+###[ LISTS ]###################################################################
+
+  expect-list:
+    # a list expression
+    # skips function-like parentheses on next level
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: paren-body
+    - include: comments
+    - include: else-pop
+
+  expect-lists-list:
+    # a list of list expressions
+    # skips function-like parentheses on next 2 levels
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: lists-list-body
+    - include: comments
+    - include: else-pop
+
+  lists-list-body:
+    - meta_scope: meta.parens.lisp
+    - include: paren-end
+    - include: lists
+    - include: expressions
+
+  lists:
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push: paren-body
+
+###[ QUOTED EXPRESSIONS ]######################################################
+
+  quotes:
+    # abbreviation of (quote ...) function
+    - match: \'
+      scope: punctuation.definition.quoted.lisp
+      push: quoted-content
+
+  quoted-content:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: quoted-paren-body
+    # A quoted symbol evaluates to the symbol.
+    - match: '{{identifier}}'
+      scope: constant.other.symbol.lisp
       captures:
-        1: punctuation.definition.variable.begin.lisp
-        2: punctuation.definition.variable.end.lisp
-    - match: (\*)(\S*)(\*)
-      scope: variable.other.global.lisp
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: immediately-pop
+
+  quoted-parens:
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push: quoted-paren-body
+
+  quoted-paren-body:
+    - meta_scope: meta.parens.lisp
+    - include: paren-end
+    - include: quoted-parens
+    - include: expressions
+
+###[ CLASS DECLARATIONS ]######################################################
+
+  class-declaration:
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defcla.htm
+    - match: (?i:defclass|define-class){{break}}
+      scope: meta.class.lisp keyword.declaration.class.lisp
+      set:
+        - class-declaration-slots
+        - class-declaration-parent-list
+        - class-declaration-name
+
+  class-declaration-name:
+    - match: '{{identifier}}'
+      scope: entity.name.class.lisp
       captures:
-        1: punctuation.definition.variable.begin.lisp
-        3: punctuation.definition.variable.end.lisp
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  class-declaration-parent-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: class-declaration-parent-list-body
+    - include: comments
+    - include: else-pop
+
+  class-declaration-parent-list-body:
+    - meta_scope: meta.parens.lisp
+    - include: namespaces
+    - match: '{{identifier}}'
+      scope: entity.other.inherited-class.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+    - include: comments
+    - include: paren-end
+
+  class-declaration-slots:
+    - meta_content_scope: meta.class.lisp
+    - include: paren-pop
+    - include: lists
+    - include: expressions
+
+###[ FUNCTION DECLARATIONS ]###################################################
+
+  function-declaration:
+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_lambda.htm
+    - match: (?i:lambda){{break}}
+      scope: meta.function.lisp keyword.declaration.function.inline.lisp
+      set:
+        - function-body
+        - function-parameter-list
+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm
+    - match: (?i:def(?:[a-z]+f)?un|defgeneric|define-(?:command(?:-global)?|parenscript)){{break}}
+      scope: meta.function.lisp keyword.declaration.function.lisp
+      set:
+        - function-body
+        - function-parameter-list
+        - function-declaration-name
+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmet.htm
+    - match: (?i:defmethod){{break}}
+      scope: meta.function.lisp keyword.declaration.function.lisp
+      set:
+        - function-body
+        - function-parameter-list
+        - method-qualifier
+        - function-declaration-name
+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
+    - match: (?i:flet|labels){{break}}
+      scope: keyword.declaration.function.lisp
+      set: function-declaration-list
+
+  function-declaration-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: function-declaration-list-body
+    - include: comments
+    - include: else-pop
+
+  function-declaration-list-body:
+    - meta_scope: meta.parens.lisp
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push:
+        - paren-end
+        - function-body
+        - function-parameter-list
+        - function-declaration-name
+    - include: comments
+    - include: paren-end
+
+  function-declaration-name:
+    - include: namespaces
+    - match: '{{identifier}}'
+      scope: entity.name.function.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  method-qualifier:
+    # qualifiers may be anything but lists
+    - include: expressions
+    - include: else-pop
+
+  function-parameter-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parameters.begin.lisp
+      set: function-parameter-list-body
+    - include: comments
+    - include: else-pop
+
+  function-parameter-list-body:
+    - clear_scopes: 1
+    - meta_scope: meta.function.parameters.lisp
+    - match: \)
+      scope: punctuation.section.parameters.end.lisp
+      pop: 1
+    - include: comments
+    - include: annotations
+    - include: keywords
+    - include: modifiers
+    - include: parameters
+
+  function-body:
+    - meta_content_scope: meta.function.lisp
+    - include: paren-pop
+    - include: parens
+    - include: expressions
+
+###[ MACRO DECLARATIONS ]######################################################
+
+  macro-declaration:
+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmac.htm
+    - match: (?i:defmacro){{break}}
+      scope: meta.macro.lisp keyword.declaration.macro.lisp
+      set:
+        - macro-body
+        - macro-parameter-list
+        - macro-declaration-name
+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
+    - match: (?i:macrolet){{break}}
+      scope: keyword.declaration.macro.lisp
+      set: macro-declaration-list
+
+  macro-declaration-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: macro-declaration-list-body
+    - include: comments
+    - include: else-pop
+
+  macro-declaration-list-body:
+    - meta_scope: meta.parens.lisp
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push:
+        - paren-end
+        - macro-body
+        - macro-parameter-list
+        - macro-declaration-name
+    - include: comments
+    - include: paren-end
+
+  macro-declaration-name:
+    - include: namespaces
+    - match: '{{identifier}}'
+      scope: entity.name.macro.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  macro-parameter-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parameters.begin.lisp
+      set: macro-parameter-list-body
+    - include: comments
+    - include: else-pop
+
+  macro-parameter-list-body:
+    - clear_scopes: 1
+    - meta_scope: meta.macro.parameters.lisp
+    - match: \)
+      scope: punctuation.section.parameters.end.lisp
+      pop: 1
+    - include: comments
+    - include: annotations
+    - include: keywords
+    - include: modifiers
+    - include: parameters
+
+  macro-body:
+    - meta_content_scope: meta.macro.lisp
+    - include: paren-pop
+    - include: parens
+    - include: expressions
+
+###[ STRUCT DECLARATIONS ]#####################################################
+
+  struct-declaration:
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defstr.htm
+    - match: (?i:defstruct|define-struct){{break}}
+      scope: meta.struct.lisp keyword.declaration.struct.lisp
+      set:
+        - struct-declaration-body
+        - struct-declaration-name
+
+  struct-declaration-name:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set:
+        - paren-body
+        - struct-declaration-qualified-name
+    - include: struct-declaration-qualified-name
+
+  struct-declaration-qualified-name:
+    - include: namespaces
+    - match: '{{identifier}}'
+      scope: entity.name.struct.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  struct-declaration-body:
+    - meta_content_scope: meta.struct.lisp
+    - include: paren-pop
+    - include: lists
+    - include: expressions
+
+###[ TYPE DECLARATIONS ]#######################################################
+
+  type-declaration:
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_deftp.htm
+    - match: (?i:deftype|define-type){{break}}
+      scope: meta.type.lisp keyword.declaration.type.lisp
+      set:
+        - type-body
+        - type-parameter-list
+        - type-declaration-name
+
+  type-declaration-name:
+    - include: namespaces
+    - match: '{{identifier}}'
+      scope: entity.name.type.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  type-parameter-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parameters.begin.lisp
+      set: type-parameter-list-body
+    - include: comments
+    - include: else-pop
+
+  type-parameter-list-body:
+    - clear_scopes: 1
+    - meta_scope: meta.type.parameters.lisp
+    - match: \)
+      scope: punctuation.section.parameters.end.lisp
+      pop: 1
+    - include: comments
+    - include: annotations
+    - include: keywords
+    - include: modifiers
+    - include: parameters
+
+  type-body:
+    - meta_content_scope: meta.type.lisp
+    - include: paren-pop
+    - include: parens
+    - include: expressions
+
+###[ VARIABLE DECLARATIONS ]###################################################
+
+  variable-declaration:
+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm
+    - match: (?i:let\*?){{break}}
+      scope: keyword.declaration.variable.lisp
+      set: variable-declaration-list
+    # https://www.lispworks.com/documentation/lw445/CLHS/Body/m_defcon.htm
+    - match: (?i:defconstant){{break}}
+      scope: meta.declaration.lisp keyword.declaration.constant.lisp
+      set: constant-declaration-name
+    # https://www.lispworks.com/documentation/HyperSpec/Body/m_defpar.htm
+    - match: (?i:defparameter|defvar){{break}}
+      scope: meta.declaration.lisp keyword.declaration.variable.lisp
+      set: variable-declaration-name
+
+  variable-declaration-list:
+    - meta_include_prototype: false
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      set: variable-declaration-list-body
+    - include: comments
+    - include: else-pop
+
+  variable-declaration-list-body:
+    - meta_scope: meta.parens.lisp
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push:
+        - paren-body
+        - variable-declaration-name
+    - match: '{{identifier}}'
+      scope: meta.declaration.lisp variable.other.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+    - include: comments
+    - include: paren-end
+
+  constant-declaration-name:
+    - meta_content_scope: meta.declaration.lisp
+    - match: '{{identifier}}'
+      scope: meta.declaration.lisp constant.other.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  variable-declaration-name:
+    - meta_content_scope: meta.declaration.lisp
+    - match: '{{identifier}}'
+      scope: meta.declaration.lisp variable.other.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+###[ OTHER DECLARATIONS ]######################################################
+
+  other-declaration:
+    - match: '{{declaration_keywords}}'
+      scope: keyword.declaration.lisp
+      pop: 1
+
+###[ DECLARE STATEMENTS ]######################################################
+
+  declare:
+    # https://www.lispworks.com/documentation/HyperSpec/Body/s_declar.htm
+    - match: (?i:declare){{break}}
+      scope: keyword.declaration.declare.lisp
+      set: declare-specifier-list
+
+  declare-specifier-list:
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
+      push:
+        - paren-body
+        - declare-identifier
+    - include: comments
+    - include: else-pop
+
+  declare-identifier:
+    - match: '{{declaration_identifiers}}'
+      scope: storage.modifier.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+###[ CONTROL FLOW STATEMENTS ]#################################################
 
   control:
-    - match: \b(?i:with|while|when|unless|typecase|to|thereis|then|return-from name|return|repeat|prog*|prog|never|named|maplist|mapl|mapcon|mapcar|mapcan|mapc|loop|let|initially|if|from|for|finally|etypecase|else|dotimes|dolist|doing|do*|do|ctypecase|cond|case|block|as|always)\b
+    # Conditional
+    - match: (?i:if|case|cond|otherwise|unless|when|[ce]?typecase){{break}}
+      scope: keyword.control.conditional.lisp
+      pop: 1
+    # Flow
+    - match: (?i:return(?:-from)?){{break}}
+      scope: keyword.control.flow.return.lisp
+      pop: 1
+    # Loop
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dolist.htm
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dotime.htm
+    - match: (?i:dolist|dotimes){{break}}
+      scope: keyword.control.loop.lisp
+      set: expect-list
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_do_do.htm
+    - match: (?i:do\*?|do-(?:all-|external-)?symbols|iterate){{break}}
+      scope: keyword.control.loop.lisp
+      set: expect-lists-list
+    # Other
+    - match: (?xi:block|map(?:can|car|con|c|list|l)){{break}}
       scope: keyword.control.lisp
+      pop: 1
+
+###[ LOOP STATEMENTS ]#########################################################
+
+  loop:
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/06_a.htm
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_loop.htm
+    - match: (?i:loop){{break}}
+      scope: keyword.control.loop.lisp
+      set: loop-body
+
+  loop-body:
+    - meta_scope: meta.loop.lisp
+    - include: paren-pop
+
+    # declaration keywords
+    - match: (?i:named){{break}}
+      scope: keyword.declaration.name.lisp
+      push: loop-name
+    - match: (?i:with){{break}}
+      scope: keyword.declaration.variable.lisp
+
+    # loop termination test keywords
+    - match: (?i:always|as|do|doing|for|never|repeat|thereis|until|while){{break}}
+      scope: keyword.control.loop.lisp
+    # conditional keywords
+    - match: (?i:end|else|if|then|unless|when){{break}}
+      scope: keyword.control.conditional.lisp
+    # control flow keywords
+    - match: (?i:finally|initially){{break}}
+      scope: keyword.control.flow.lisp
+    - match: (?i:return(?:-from)?){{break}}
+      scope: keyword.control.flow.return.lisp
 
-  functions:
-    - match: \b(?i:(defun|defmethod|defmacro))\b\s+([\w\-!?<>]*)
-      scope: meta.function.lisp
+    # operator keywords
+    - match: ={{break}} # can be both, assignment and comparison
+      scope: keyword.operator.lisp
+    - match: (?i:into){{break}}
+      scope: keyword.operator.assignment.lisp
+    - match: (?i:and){{break}}
+      scope: keyword.operator.logical.lisp
+    - match: |-
+        (?xi: across | above | being | below | by | each | in | of | on | the
+        | (?:down|up)?to | (?:up)?from | using ){{break}}
+      scope: keyword.other.loop.lisp
+
+    # expressions
+    - include: comments
+    - include: parens
+    - include: numbers
+    - include: strings
+    - include: annotations
+    - include: keywords
+    - include: quotes
+    - include: macros
+    - include: modifiers
+    - match: (?={{identifier}})
+      push: loop-identifier
+
+  loop-identifier:
+    - include: builtin-function
+    - include: identifier
+
+  loop-name:
+    - match: '{{identifier}}'
+      scope: entity.name.loop.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+###[ QUOTE STATEMENTS ]########################################################
+
+  quote:
+    - match: (?i:quote){{break}}
+      scope: meta.function-call.lisp support.function.lisp
+      set: quote-args
+
+  quote-args:
+    - include: paren-pop
+    - include: quoted-parens
+    - include: expressions
+
+###[ FUNCTIONS ]###############################################################
+
+  builtin-function:
+    - match: '{{builtin_functions}}'
+      scope: meta.function-call.lisp support.function.lisp
+      pop: 1
+
+  other-function:
+    # functions starting with `make-` are most likely used as constructors
+    - match: make-{{identifier}}
+      scope: meta.function-call.lisp variable.function.constructor.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    # mutating functions changing data in-place end with !
+    - match: (?![+*#`'&]\S){{identifier}}\!{{break}}
+      scope: meta.function-call.lisp variable.function.mutating.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    # predicate functions returning boolean values end with ? or -p
+    - match: (?![+*#`'&]\S){{identifier}}(?:\?|-p){{break}}
+      scope: meta.function-call.lisp variable.function.predicate.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    # anything not looking like global variable, constant or macro
+    - match: (?![+*#`'&]\S|{{builtin_constants}}|{{builtin_types}}){{identifier}}
+      scope: meta.function-call.lisp variable.function.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+
+###[ MACROS ]##################################################################
+
+  macros:
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node191.html
+    - include: macro-arrays
+    - include: macro-characters
+    - include: macro-conditionals
+    - include: macro-functions
+    - include: macro-numbers
+    - include: macro-pathnames
+    - include: macro-structures
+    - include: macro-throw-exceptions
+    - include: macro-variables
+    - include: macro-vectors
+
+  macro-conditionals:
+    # Feature-flags
+    - match: (#[-+])({{identifier}})?
+      captures:
+        1: keyword.control.conditional.lisp
+        2: constant.other.feature.lisp
+        3: punctuation.definition.symbol.begin.lisp
+        4: punctuation.definition.symbol.end.lisp
+
+  macro-arrays:
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node29.html
+    - match: (#\d*[aA])(\()
+      captures:
+        1: punctuation.definition.array.lisp
+        2: meta.parens.lisp punctuation.section.parens.begin.lisp
+      push: macro-array-body
+    - match: (#\d*[aA])({{identifier}})
+      captures:
+        1: punctuation.definition.array.lisp
+        2: variable.other.lisp
+        3: punctuation.definition.symbol.begin.lisp
+        4: punctuation.definition.symbol.end.lisp
+
+  macro-array-body:
+    - meta_scope: meta.array.lisp
+    - meta_content_scope: meta.parens.lisp
+    - match: \)
+      scope: meta.parens.lisp punctuation.section.parens.end.lisp
+      pop: 1
+    - include: parens
+    - include: expressions
+
+  macro-characters:
+    # Standard Characters
+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node22.html
+    # Non-Standard Characters
+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node24.html
+    # Character Attributes
+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node25.html
+    - match: (#(\d*)\\){{char_attributes}}?(?i:Space|NewLine){{break}}
+      scope: constant.character.standard.lisp
+      captures:
+        1: punctuation.definition.constant.lisp
+        2: storage.modifier.attributes.lisp
+    - match: (#(\d*)\\){{char_attributes}}?(?i:Backspace|Tab|Linefeed|Page|Return|RubOut){{break}}
+      scope: constant.character.semi-standard.lisp
+      captures:
+        1: punctuation.definition.constant.lisp
+        2: storage.modifier.attributes.lisp
+    - match: (#(\d*)\\){{char_attributes}}?{{standard_char}}{{break}}
+      scope: constant.character.standard.lisp
       captures:
-        1: storage.type.function-type.lisp
-        2: entity.name.function.lisp
-    - match: \b(?i:zerop|yes-or-no-p|y-or-n-p|write-to-string|write-string|write-char|write-byte|write|with-standard-io-syntax|with-slots|with-simple-restart|with-package-iterator|with-output-to-string|with-open-stream|with-open-file|with-input-from-string|with-hash-table-iterator|with-condition-restarts|with-compilation-unit|with-accessors|wild-pathname-p|warn|vectorp|vector-push-extend|vector-push|vector-pop|vector|variable-information|values-list|values|user-homedir-pathname|use-value|use-package|upper-case-p|upgraded-complex-part-type|upgraded-array-element-type|update-instance-for-redefined-class|update-instance-for-different-class|unuse-package|untrace|until-if|until|unread-char|union|unintern|unexport|typep|type-of|type-error-expected-type|type-error-datum|two-way-stream-output-stream|two-way-stream-input-stream|truncate|truename|tree-equal|translate-pathname|translate-logical-pathname|trace|to-alter|time|third|terpri|terminate-producing|tenth|tanh|tan|tailp|synonym-stream-symbol|symbolp|symbol-value|symbol-plist|symbol-package|symbol-name|symbol-function|sxhash|svref|summing|sum|subtypep|substitute-if-not|substitute-if|substitute|subst-if-not|subst-if|subst|subsetp|subseries|subseq|sublis|stringp|string>=|string>|string=|string<=|string<|string/=|string-upcase|string-trim|string-right-trim|string-not-lessp|string-not-greaterp|string-not-equal|string-lessp|string-left-trim|string-greaterp|string-equal|string-downcase|string-char-p|string-capitalize|string|streamp|stream-external-format|stream-error-stream|stream-element-type|store-value|step|standard-char-p|stable-sort|sqrt|split-if|split|special-form-p|sort|some|software-version|software-type|slot-value|slot-unbound|slot-missing|slot-makunbound|slot-exists-p|slot-boundp|sleep|sixth|sinh|sin|simple-vector-p|simple-string-p|simple-condition-format-string|simple-condition-format-arguments|simple-bit-vector-p|signum|signal|short-site-name|shiftf|shared-initialize|shadowing-import|shadow|seventh|setq|setf|set-syntax-from-char|set-pprint-dispatch|set-macro-character|set-exclusive-or|set-dispatch-macro-character|set-difference|set-char-bit|set|series|second|search|schar|scan-symbols|scan-sublists|scan-range|scan-plist|scan-multiple|scan-lists-of-lists-fringe|scan-lists-of-lists|scan-hash|scan-fn-inclusive|scan-fn|scan-file|scan-alist|scan|scale-float|sbit|rplacd|rplaca|row-major-aref|round|rotatef|room|reverse|revappend|result-of|restart-name|restart-case|restart-bind|rest|require|replace|rename-package|rename-file|remprop|remove-method|remove-duplicates|remove|remhash|remf|reinitialize-instance|reduce|realpart|realp|readtablep|readtable-case|read-preserving-whitespace|read-line|read-from-string|read-delimited-list|read-char-no-hang|read-char|read-byte|read|rationalp|rationalize|rational|rassoc-if-not|rassoc-if|rassoc|random-state-p|random|quote|pushnew|push|psetq|psetf|provide|progn|prog2|prog1|producing|proclaim|probe-file|print-unreadable-object|print-object|print|prin1|previous|pprint-tabular|pprint-tab|pprint-pop|pprint-newline|pprint-logical-block|pprint-linear|pprint-indent|pprint-fill|pprint-exit-if-list-exhausted|pprint-dispatch|positions|position-if-not|position-if|position|pop|plusp|phase|peek-char|pathnamep|pathname-version|pathname-type|pathname-name|pathname-match-p|pathname-host|pathname-directory|pathname-device|pathname|parse-namestring|parse-macro|parse-integer|pairlis|packagep|package-used-by-list|package-use-list|package-shadowing-symbols|package-nicknames|package-name|package-error-package|output-stream-p|open-stream-p|open|oddp|nunion|numerator|numberp|nthcdr|nth-value|nth|nsubstitute-if-not|nsubstitute-if|nsubstitute|nsubst-if-not|nsubst-if|nsubst|nsublis|nstring-upcase|nstring-downcase|nstring-capitalize|nset-exclusive-or|nset-difference|nreverse|nreconc|notevery|notany|no-next-method|no-applicable-method|ninth|nintersection|next-out|next-method-p|next-in|nconcing|nconc|nbutlast|namestring|name-char|multiple-value-setq|multiple-value-list|multiple-value-bind|muffle-warning|mismatch|minusp|minimizing|minimize|mingle|method-qualifiers|method-combination-error|merge-pathnames|merge|memberp|member-if-not|member-if|member|maximizing|maximize|mask-field|mask|mapping|maphash|map-into|map-fn|map|makunbound|make-two-way-stream|make-synonym-stream|make-symbol|make-string-output-stream|make-string-input-stream|make-string|make-sequence|make-random-state|make-pathname|make-package|make-load-form-saving-slots|make-load-form|make-list|make-instances-obsolete|make-instance|make-hash-table|make-echo-stream|make-dispatch-macro-character|make-condition|make-concatenated-stream|make-char|make-broadcast-stream|make-array|macroexpand-1|macroexpand|macro-function|machine-version|machine-type|machine-instance|lower-case-p|loop-finish|long-site-name|logtest|logorc2|logorc1|lognot|lognand|logical-pathname-translations|logical-pathname|logcount|logbitp|logandc2|logandc1|log|locally|load-logical-pathname-translations|load|listp|listen|list-length|list-all-packages|list*|list|lisp-implementation-version|lisp-implementation-type|length|ldiff|ldb-test|ldb|lcm|latch|last|lambda|keywordp|iterate|isqrt|invoke-restart|invoke-debugger|invalid-method-error|intersection|intern|interactive-stream-p|integerp|integer-length|integer-decode-float|int-char|inspect|input-stream-p|initialize-instance|in-package|import|imagpart|ignore-errors|identity|host-namestring|hash-table-test|hash-table-size|hash-table-rehash-threshold|hash-table-rehash-size|hash-table-p|hash-table-count|handler-case|handler-bind|graphic-char-p|gethash|getf|get-universal-time|get-setf-method-multiple-value|get-setf-method|get-properties|get-output-stream-string|get-internal-run-time|get-internal-real-time|get-decoded-time|get|gentemp|gensym|generic-function|generator|gcd|gathering|gatherer|functionp|function-lambda-expression|function-keywords|function-information|funcall|fourth|formatter|format|floor|floatp|float-sign|float-radix|float-precision|float-digits|float|first|finish-output|find-symbol|find-restart|find-package|find-method|find-if-not|find-if|find-class|find-all-symbols|find|fill-pointer|fill|file-write-date|file-string-length|file-position|file-namestring|file-length|file-error-pathname|file-author|fifth|ffloor|fdefinition|fboundp|f|expt|export|expand|exp|every|evenp|evalhook|eval|error|ensure-generic-function|enough-namestring|endp|encode-universal-time|enclose|encapsulated|elt|eighth|ed|echo-stream-output-stream|echo-stream-input-stream|ecase|dribble|dpb|documentation|do-symbols|do-external-symbols|do-all-symbols|disassemble|directory-namestring|directory|digit-char-p|digit-char|destructuring-bind|describe-object|describe|deposit-field|denominator|delete-package|delete-if-not|delete-if|delete-file|delete-duplicates|delete|defvar|deftype|defstruct|defpackage|define-setf-method|define-modify-macro|define-method-combination|define-declaration|define-condition|define-compiler-macro|defgeneric|defclass|decode-universal-time|decode-float|declaration-information|declaim|counting|count-if-not|count-if|count|cotruncate|cosh|cos|copy-tree|copy-symbol|copy-seq|copy-readtable|copy-pprint-dispatch|copy-list|copy-alist|continue|constantp|consp|cons|conjugate|concatenated-stream-streams|concatenate|compute-restarts|compute-applicable-methods|complexp|complex|complement|compiler-macroexpand-1|compiler-macroexpand|compiler-macro-function|compiler-let|compiled-function-p|compile-file-pathname|compile-file|compile|commonp|collecting-fn|collecting|collect-sum|collect-plist|collect-or|collect-nth|collect-nconc|collect-min|collect-max|collect-length|collect-last|collect-hash|collect-fn|collect-first|collect-file|collect-append|collect-and|collect-alist|collect|coerce|code-char|clrhash|close|clear-input|class-of|class-name|cis|chunk|choose-if|choose|check-type|characterp|character|char>=|char>|char=|char<=|char<|char/=|char-upcase|char-not-lessp|char-not-greaterp|char-not-equal|char-name|char-lessp|char-int|char-greaterp|char-font|char-equal|char-downcase|char-code|char-bits|char-bit|char|change-class|cerror|cell-error-name|ceiling|cdr|cddr|cdddr|cddddr|cdddar|cddar|cddadr|cddaar|cdar|cdadr|cdaddr|cdadar|cdaar|cdaadr|cdaaar|ccase|catenate|car|call-next-method|call-method|cadr|caddr|cadddr|caddar|cadar|cadadr|cadaar|caar|caadr|caaddr|caadar|caaar|caaadr|caaaar|byte-size|byte-position|byte|butlast|broadcast-stream-streams|break|boundp|both-case-p|boole|bit-xor|bit-vector-p|bit-orc2|bit-orc1|bit-not|bit-nor|bit-nand|bit-ior|bit-eqv|bit-andc2|bit-andc1|bit-and|bit|augment-environment|atom|atanh|atan|assoc-if-not|assoc-if|assoc|assert|asinh|asin|ash|arrayp|array-total-size|array-row-major-index|array-rank|array-in-bounds-p|array-has-fill-pointer-p|array-element-type|array-dimensions|array-dimension|arithmetic-error-operation|arithmetic-error-operands|aref|apropos-list|apropos|applyhook|apply|appending|append|alter|alphanumericp|alpha-char-p|adjustable-array-p|adjust-array|adjoin|add-method|acosh|acos|acons|abs|abort)\b
-      scope: support.function.lisp
+        1: punctuation.definition.constant.lisp
+        2: storage.modifier.attributes.lisp
+    - match: (#(\d*)\\){{char_attributes}}?{{identifier_char}}+{{break}}
+      scope: constant.character.non-standard.lisp
+      captures:
+        1: punctuation.definition.constant.lisp
+        2: storage.modifier.attributes.lisp
+
+  macro-functions:
+    # Function reference
+    - match: \#[Mm']
+      scope: punctuation.definition.function.lisp
+      push: macro-function-name
+
+  macro-function-name:
+    - include: namespaces
+    - include: operator
+    - include: builtin-function
+    - include: other-function
+    - include: immediately-pop
+
+  macro-numbers:
+    # binary rational numbers
+    - match: |-
+        (?xi)
+        ( \#(?: b | 2r ) )
+        ( [-+]? )
+        ( [01]+ (/) [01]+ )
+        {{break}}
+      scope: meta.number.rational.binary.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: keyword.operator.arithmetic.lisp
+    # binary integer numbers
+    - match: |-
+        (?xi)
+        ( \#(?: b | 2r ) )
+        ( [-+]? )
+        ( [01]+ (?: (\.)(?![01]) | {{break}} ) )
+      scope: meta.number.integer.binary.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: punctuation.separator.decimal.lisp
+    # octal rational numbers
+    - match: |-
+        (?xi)
+        ( \#(?: o | 8r ) )
+        ( [-+]? )
+        ( [0-7]+ (/) [0-7]+ )
+        {{break}}
+      scope: meta.number.rational.octal.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: keyword.operator.arithmetic.lisp
+    # octal integer numbers
+    - match: |-
+        (?xi)
+        ( \#(?: o | 8r ) )
+        ( [-+]? )
+        ( [0-7]+ (?: (\.)(?![0-7]) | {{break}} ) )
+      scope: meta.number.integer.octal.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: punctuation.separator.decimal.lisp
+    # hexadecimal rational numbers
+    - match: |-
+        (?xi)
+        ( \#(?: x | 16r ) )
+        ( [-+]? )
+        ( \h+ (/) \h+ )
+        {{break}}
+      scope: meta.number.rational.hexadecimal.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: keyword.operator.arithmetic.lisp
+    # hexadecimal integer numbers
+    - match: |-
+        (?xi)
+        ( \#(?: x | 16r ) )
+        ( [-+]? )
+        ( \h+ (?: (\.)(?!\h) | {{break}} ) )
+      scope: meta.number.integer.hexadecimal.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: punctuation.separator.decimal.lisp
+    # radix rational numbers
+    - match: |-
+        (?xi)
+        ( \#\d+r )
+        ( [-+]? )
+        ( [[:alnum:]]+ (/) [[:alnum:]]+ )
+        {{break}}
+      scope: meta.number.rational.other.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: keyword.operator.arithmetic.lisp
+    # radix integer numbers
+    - match: |-
+        (?xi)
+        ( \#\d+r )
+        ( [-+]? )
+        ( [[:alnum:]]+ (?: (\.)(?![[:alnum:]]) | {{break}} ) )
+      scope: meta.number.integer.other.lisp
+      captures:
+        1: constant.numeric.base.lisp
+        2: keyword.operator.arithmetic.lisp
+        3: constant.numeric.value.lisp
+        4: punctuation.separator.decimal.lisp
+    # complex numbers
+    - match: (#[cC])(\()
+      captures:
+        1: punctuation.definition.complex.lisp
+        2: meta.parens.lisp punctuation.section.parens.begin.lisp
+      push: macro-numbers-complex-body
+
+  macro-numbers-complex-body:
+    - meta_scope: meta.number.complex.lisp
+    - meta_content_scope: meta.parens.lisp
+    - match: \)
+      scope: meta.parens.lisp punctuation.section.parens.end.lisp
+      pop: 1
+    - include: parens
+    - include: expressions
 
-  operators:
-    - match: '\/\=|\>\=|\<\=|\=|\>|\<|\b(?i:max|min|eq|neq|eql|equalp|equal)\b'
+  macro-pathnames:
+    - match: (#\d*[pP])(\")
+      captures:
+        1: punctuation.definition.pathname.lisp
+        2: string.quoted.double.lisp punctuation.definition.string.begin.lisp
+      push: macro-pathname-body
+
+  macro-pathname-body:
+    - meta_scope: meta.path.lisp
+    - meta_content_scope: string.quoted.double.lisp
+    - match: \"
+      scope: string.quoted.double.lisp punctuation.definition.string.end.lisp
+      pop: 1
+    - match: \\.
+      scope: constant.character.escape.lisp
+
+  macro-structures:
+    # Structures
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node39.html
+    - match: (#\d*[sS])(\()
+      captures:
+        1: punctuation.definition.struct.lisp
+        2: meta.parens.lisp punctuation.section.parens.begin.lisp
+      push:
+        - macro-struct-body
+        - macro-struct-name
+
+  macro-struct-name:
+    - match: '{{identifier}}'
+      scope: entity.name.struct.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: else-pop
+
+  macro-struct-body:
+    - meta_scope: meta.struct.lisp
+    - meta_content_scope: meta.parens.lisp
+    - match: \)
+      scope: meta.parens.lisp punctuation.section.parens.end.lisp
+      pop: 1
+    - include: lists
+    - include: expressions
+
+  macro-vectors:
+    # Vector
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node30.html
+    - match: (#\d*)(\()
+      captures:
+        1: punctuation.definition.vector.lisp
+        2: meta.parens.lisp punctuation.section.parens.begin.lisp
+      push: macro-vector-body
+    # Bit vector
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node32.html
+    - match: (#\d*\*)([01]*){{break}}
+      scope: meta.vector.lisp
+      captures:
+        1: punctuation.definition.vector.lisp
+        2: meta.number.integer.binary constant.numeric.value.lisp
+
+  macro-vector-body:
+    - meta_scope: meta.vector.lisp
+    - meta_content_scope: meta.parens.lisp
+    - match: \)
+      scope: meta.parens.lisp punctuation.section.parens.end.lisp
+      pop: 1
+    - include: parens
+    - include: expressions
+
+  macro-throw-exceptions:
+    - match: '#[ \t\n\r)<]'
+      scope: keyword.control.exception.throw.lisp
+
+  macro-variables:
+    # Inline runtime/loadtime eval
+    - match: \#[.,:]
+      scope: punctuation.definition.variable.lisp
+    # Local assignment
+    - match: ((#)\d+)\s*(=)
+      captures:
+        1: variable.other.local.lisp
+        2: punctuation.definition.variable.lisp
+        3: keyword.operator.assignment.lisp
+    - match: (#)(\d+)(#)
+      scope: variable.other.lisp
+      captures:
+        1: punctuation.definition.variable.begin.lisp
+        2: variable.other.local.lisp
+        3: punctuation.definition.variable.end.lisp
+
+###[ OPERATORS ]###############################################################
+
+  modifiers:
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_df.htm
+    - match: '[`'']'
+      scope: punctuation.definition.quoted.lisp
+    - match: ',@?'
+      scope: punctuation.definition.variable.lisp
+
+  operator:
+    # Contains 'Standardized Compound Type Specifier Names'
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm
+    - match: (?:(?:/=|>=|<=|=|>|<)|(?i:max|min|eq|neq|eql|equalp|equal)){{break}}
       scope: keyword.operator.comparison.lisp
-    - match: '\+|\-|\*|\/|\b(?i:mod|rem|incf|decf)\b'
+      pop: 1
+    - match: ={{break}}
+      scope: keyword.operator.assignment.lisp
+      pop: 1
+    - match: (?:[-+*/]|(?i:mod|rem|incf|decf)){{break}}
       scope: keyword.operator.arithmetic.lisp
-    - match: \b(?i:and|or|not)\b
+      pop: 1
+    - match: (?i:and|or|not|satisfies){{break}}
       scope: keyword.operator.logical.lisp
-    - match: \b(?i:logand|logior|logxor|lognor|logeqv)\b
+      pop: 1
+    - match: (?i:logand|logior|logxor|lognor|logeqv){{break}}
       scope: keyword.operator.bitwise.lisp
+      pop: 1
 
-  parens:
-    - match: '\('
-      scope: punctuation.definition.group.begin.lisp
-      push:
-        - meta_scope: meta.group.lisp
-        - match: '\)'
-          scope: punctuation.definition.group.end.lisp
-          pop: true
-        - include: expressions
-        - include: parens
-    - match: '\)'
-      scope: invalid.illegal.stray-bracket-end.lisp
-
-  constants:
-    - match: \b(?i:null|t|single-float-negative-epsilon|single-float-epsilon|short-float-negative-epsilon|short-float-epsilon|pi|nil|multiple-values-limit|most-positive-single-float|most-positive-short-float|most-positive-long-float|most-positive-fixnum|most-positive-double-float|most-negative-single-float|most-negative-short-float|most-negative-long-float|most-negative-fixnum|most-negative-double-float|long-float-negative-epsilon|long-float-epsilon|least-positive-single-float|least-positive-short-float|least-positive-normalized-single-float|least-positive-normalized-short-float|least-positive-normalized-long-float|least-positive-normalized-double-float|least-positive-long-float|least-positive-double-float|least-negative-single-float|least-negative-short-float|least-negative-normalized-single-float|least-negative-normalized-short-float|least-negative-normalized-long-float|least-negative-normalized-double-float|least-negative-long-float|least-negative-double-float|lambda-parameters-limit|lambda-list-keywords|internal-time-units-per-second|double-float-negative-epsilon|double-float-epsilon|char-super-bit|char-meta-bit|char-hyper-bit|char-font-limit|char-control-bit|char-code-limit|char-bits-limit|call-arguments-limit|array-total-size-limit|array-rank-limit|array-dimension-limit)\b
-      scope: constant.language.lisp
-    - match: '(#)(\w|[\\+-=<>''"&#])+'
-      scope: constant.character.lisp
-      captures:
-        1: punctuation.definition.constant.lisp
+###[ LITERALS ]################################################################
 
   numbers:
-    - match: '\b((0(x|X)\h*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(?i:l|ul|u|f|ll|ull)?\b'
-      scope: constant.numeric.lisp
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node16.html
+    # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_ca.htm
+    # decimal floating point
+    - match: |-
+        (?x)
+        ( [-+]? )
+        ( \d* (?: (\.) \d+ )  {{exponent}}?
+        | \d+ (?: (\.) \d* )? {{exponent}})
+        {{break}}
+      scope: meta.number.float.decimal.lisp
+      captures:
+        1: keyword.operator.arithmetic.lisp
+        2: constant.numeric.value.lisp
+        3: punctuation.separator.decimal.lisp
+        4: punctuation.separator.decimal.lisp
+    # decimal rational numbers
+    - match: |-
+        (?x)
+        ( [-+]? )
+        ( \d+ (/) \d+ )
+        {{break}}
+      scope: meta.number.rational.decimal.lisp
+      captures:
+        1: keyword.operator.arithmetic.lisp
+        2: constant.numeric.value.lisp
+        3: keyword.operator.arithmetic.lisp
+    # decimal integer numbers
+    - match: |-
+        (?x)
+        ( [-+]? )
+        ( \d+ (?: (\.)(?!\d) | {{break}} ) )
+      scope: meta.number.integer.decimal.lisp
+      captures:
+        1: keyword.operator.arithmetic.lisp
+        2: constant.numeric.value.lisp
+        3: punctuation.separator.decimal.lisp
 
   strings:
-    - match: '"'
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node31.html
+    - match: \"
       scope: punctuation.definition.string.begin.lisp
+      push: string-body
+
+  string-body:
+    - meta_include_prototype: false
+    - meta_scope: meta.string.lisp string.quoted.double.lisp
+    - match: \"
+      scope: punctuation.definition.string.end.lisp
+      pop: 1
+    - match: \\.
+      scope: constant.character.escape.lisp
+    - include: string-format-mini-language
+
+  string-format-mini-language:
+    # https://www.hexstreamsoft.com/articles/common-lisp-format-reference/clhs-summary/#subsections-summary-table
+    - match: (~)(\d*)[%&|~]
+      scope: constant.character.escape.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        # 2: constant.numeric.integer.decimal.lisp
+    - match: (~):?@?[CR]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+    # ~R
+    - match: |-
+        (?x:
+          (~)
+          (?:(\d*)             # Radix
+            (?:(,)\d*          # mincol
+              (?:(,)(?:'.)?    # padchar
+                (?:(,)(?:'.)?  # comma-char
+                  (?:(,)\d*)?  # comma-interval
+          )?)?)?)
+        ):?@?[rR]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.definition.numeric.base.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+        5: punctuation.separator.sequence.lisp
+        6: punctuation.separator.sequence.lisp
+    # ~b, ~o, ~d, ~x
+    - match: |-
+        (?x:
+          (~)
+          (?:\d*             # mincol
+            (?:(,)(?:'.)?    # padchar
+              (?:(,)(?:'.)?  # comma-char
+                (?:(,)\d*)?  # comma-interval
+          )?)?)?
+        ):?@?[bBoOdDxX]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.separator.sequence.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+    # ~f
+    - match: |-
+        (?x:
+          (~)
+          (?:\d*                 # width
+            (?:(,)\d*            # decimals
+              (?:(,)\d*          # scale
+                (?:(,)(?:'.)?    # overflowchar
+                  (?:(,)(?:'.)?  # padchar
+          )?)?)?)?)?
+        )@?[fF]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.separator.sequence.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+        5: punctuation.separator.sequence.lisp
+    # ~e, ~g
+    - match: |-
+        (?x:
+          (~)
+          (?:\d*                     # width
+            (?:(,)\d*                # decimals
+              (?:(,)\d*              # exponent-width
+                (?:(,)\d*            # scale
+                  (?:(,)(?:'.)?      # overflowchar
+                    (?:(,)(?:'.)?    # padchar
+                      (?:(,)(?:'.)?  # exponentchar
+          )?)?)?)?)?)?)?
+        )@?[eEgG]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.separator.sequence.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+        5: punctuation.separator.sequence.lisp
+        6: punctuation.separator.sequence.lisp
+        7: punctuation.separator.sequence.lisp
+    # ~$
+    - match: |-
+        (?x:
+          (~)
+          (?:\d*               # decimals
+            (?:(,)\d*          # min-units
+              (?:(,)\d*        # min-width
+                (?:(,)(?:'.)?  # padchar
+          )?)?)?)?
+        ):?@?\$
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.separator.sequence.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+    # ~a, ~s
+    - match: |-
+        (?x:
+          (~)
+          (?:\d*               # min-col
+            (?:(,)\d*          # col-inc
+              (?:(,)\d*        # min-pad
+                (?:(,)(?:'.)?  # padchar
+          )?)?)?)?
+        ):?@?[aAsS]
+      scope: constant.other.placeholder.lisp
+      captures:
+        1: punctuation.definition.placeholder.lisp
+        2: punctuation.separator.sequence.lisp
+        3: punctuation.separator.sequence.lisp
+        4: punctuation.separator.sequence.lisp
+
+###[ SYMBOLS ]#################################################################
+
+  annotations:
+    - match: (&){{identifier}}
+      scope: variable.annotation.lisp
+      captures:
+        1: punctuation.definition.annotation.lisp
+        2: punctuation.definition.symbol.begin.lisp
+        3: punctuation.definition.symbol.end.lisp
+
+  keywords:
+    # The colon : is a package marker.
+    # If the package name is missing, the symbol is in the KEYWORD package.
+    - match: (::?)({{identifier}})
+      captures:
+        1: punctuation.accessor.lisp
+        2: keyword.other.symbol.lisp
+        3: punctuation.definition.symbol.begin.lisp
+        4: punctuation.definition.symbol.end.lisp
+    - match: \.{{break}}
+      scope: keyword.control.lisp
+
+  identifiers:
+    # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html
+    # Pushing a dedicated context reduces syntax cache size
+    # and increases parsing performance, significantly.
+    - match: (?={{identifier}})
+      push: identifier
+
+  identifier:
+    - include: namespaces
+    # types
+    - match: '{{builtin_types}}'
+      scope: storage.type.lisp
+      pop: 1
+    # constants
+    - match: (?i:true|false){{break}}
+      scope: constant.language.boolean.lisp
+      pop: 1
+    - match: (?i:nil|null){{break}}
+      scope: constant.language.null.lisp
+      pop: 1
+    - match: '{{builtin_constants}}'
+      scope: constant.language.lisp
+      pop: 1
+    - match: \+\S+\+{{break}}
+      scope: constant.other.lisp
+      pop: 1
+    # variables
+    - match: '{{builtin_variables}}'
+      scope: variable.language.lisp
+      pop: 1
+    - match: '{{identifier}}'
+      scope: variable.other.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: immediately-pop
+
+  parameters:
+    # parameter with initial value
+    - match: \(
+      scope: punctuation.section.parens.begin.lisp
       push:
-        - meta_scope: string.quoted.double.lisp
-        - match: '"'
-          scope: punctuation.definition.string.end.lisp
-          pop: true
-        - match: \\.
-          scope: constant.character.escape.lisp
-
-  block-comment:
-    - match: '#\|'
-      scope: punctuation.definition.comment.begin.lisp
-      push:
-        - meta_scope: comment.block.lisp
-        - include: block-comment
-        - match: '\|#'
-          scope: punctuation.definition.comment.end.lisp
-          pop: true
+        - paren-body
+        - parameter-name
+    # parameter without initial value
+    - match: '{{identifier}}'
+      scope: variable.parameter.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
 
-  comments:
-    - include: block-comment
-    - match: '\|#'
-      scope: invalid.illegal.stray-comment-end.lisp
-    - match: (;).*$\n?
-      scope: comment.line.semicolon.lisp
+  parameter-name:
+    - include: annotations
+    - include: keywords
+    - include: modifiers
+    - match: '{{identifier}}'
+      scope: variable.parameter.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+      pop: 1
+    - include: comments
+    - include: else-pop
+
+  namespaces:
+    # built-in namespace indicating keyword symbols
+    # note: accessor is consumed by `keywords` context
+    - match: (\|?)keyword(\|?)(?=:)
+      scope: variable.namespace.lisp
+      captures:
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+    # normal namespaces but not an escaped char #\:
+    - match: ((?!#\\?){{identifier}})(::?)
+      captures:
+        1: variable.namespace.lisp
+        2: punctuation.definition.symbol.begin.lisp
+        3: punctuation.definition.symbol.end.lisp
+        4: punctuation.accessor.lisp
+
+  variables:
+    # Symbols evaluate to their values
+    #   https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html
+    - match: '{{identifier}}'
+      scope: variable.other.lisp
       captures:
-        1: punctuation.definition.comment.lisp
+        1: punctuation.definition.symbol.begin.lisp
+        2: punctuation.definition.symbol.end.lisp
+
+###[ PROTOTYPES ]##############################################################
+
+  else-pop:
+    - match: (?=\S)
+      pop: 1
+
+  immediately-pop:
+    - match: ''
+      pop: 1
+
+  paren-pop:
+    - match: (?=\))
+      pop: 1
+
+###############################################################################
+
+variables:
+
+  # variables / keyword-symbols
+  identifier: (?:{{identifier_char}}*{{identifier_must_have}}{{identifier_char}}*|{{quoted_identifier}})
+  identifier_char: (?:\\.|[^{{break_char}}])
+  identifier_must_have: (?:\\.|[^\d.{{break_char}}]) # May not be only digits or periods
+  quoted_identifier: (\|)(?:\\.|[^|])*(\|)
+
+  break: (?={{break_char}}|$)
+  break_char: '[\s()"'',:;|]'
+
+  # caracters
+  standard_char: '[0-9A-Za-z!"#$%&''()*+,\-./:;<=>?@\\\[\]^_`{|}~]'
+  char_attributes: (?:(?:[[:alnum:]_]+-)+\\?)
+
+  # numbers
+  exponent: (?:[esfdlESFDL][-+]?\d+)
+
+  declaration_keywords: |-
+    (?xi:
+      declaim
+    | define-(?: compiler-macro | condition | declaration | method-combination | modify-macro | setf-method )
+    | def(?: class | constant | generic | macro | method | package | parameter | setf | struct | type | un | var )
+    | generic-(?: flet | function | labels )
+    | flet
+    | labels
+    | let\*?
+    | locally
+    | macrolet
+    | multiple-value-bind
+    | proclaim
+    | prog\*?
+    | with-(?: accessors | added-methods | condition-restarts | input-from-string | open-file | open-stream | output-to-string | standard-io-syntax )
+    ){{break}}
+
+  declaration_identifiers: |-
+    (?xi:
+      dynamic-extent
+    | ftype
+    | ignorable
+    | ignore
+    | inline
+    | notinline
+    | optimize
+    | special
+    | type
+    ){{break}}
+
+  builtin_constants: |-
+    (?xi:
+      t | true | false | null | nil | pi
+    | array-(?: rank | dimension | total-size )-limit
+    | call-arguments-limit
+    | char-(?: (?: super | hyper | meta | control )-bit | (?: font | code | bits )-limit )
+    | internal-time-units-per-second
+    | lambda-(?: parameters-limit | list-keywords )
+    | least-(?: positive | negative )-normalized-(?: single | short | long | double )-float
+    | most-(?: positive | negative )-fixnum
+    | (?: most | least )-(?: positive | negative )-(?: single | short | long | double )-float
+    | multiple-values-limit
+    | (?: single | short | long | double )-float-(?: negative- )?epsilon
+    ){{break}}
+
+  builtin_functions: |-
+    (?xi:
+      abort
+    | abs
+    | acons
+    | acos
+    | acosh
+    | add-method
+    | adjoin
+    | adjust-array
+    | adjustable-array-p
+    | alpha-char-p
+    | alphanumericp
+    | alter
+    | append
+    | appending
+    | apply
+    | applyhook
+    | apropos
+    | apropos-list
+    | aref
+    | arithmetic-error-operands
+    | arithmetic-error-operation
+    | array-dimension
+    | array-dimensions
+    | array-element-type
+    | array-has-fill-pointer-p
+    | array-in-bounds-p
+    | array-rank
+    | array-row-major-index
+    | array-total-size
+    | arrayp
+    | ash
+    | asin
+    | asinh
+    | assert
+    | assoc
+    | assoc-if
+    | assoc-if-not
+    | atan
+    | atanh
+    | atom
+    | augment-environment
+    | bit
+    | bit-and
+    | bit-andc1
+    | bit-andc2
+    | bit-eqv
+    | bit-ior
+    | bit-nand
+    | bit-nor
+    | bit-not
+    | bit-orc1
+    | bit-orc2
+    | bit-vector-p
+    | bit-xor
+    | boole
+    | both-case-p
+    | boundp
+    | break
+    | broadcast-stream-streams
+    | butlast
+    | byte
+    | byte-position
+    | byte-size
+    | caaaar
+    | caaadr
+    | caaar
+    | caadar
+    | caaddr
+    | caadr
+    | caar
+    | cadaar
+    | cadadr
+    | cadar
+    | caddar
+    | cadddr
+    | caddr
+    | cadr
+    | call-method
+    | call-next-method
+    | car
+    | catenate
+    | ccase
+    | cdaaar
+    | cdaadr
+    | cdaar
+    | cdadar
+    | cdaddr
+    | cdadr
+    | cdar
+    | cddaar
+    | cddadr
+    | cddar
+    | cdddar
+    | cddddr
+    | cdddr
+    | cddr
+    | cdr
+    | ceiling
+    | cell-error-name
+    | cerror
+    | change-class
+    | char
+    | char-bit
+    | char-bits
+    | char-code
+    | char-downcase
+    | char-equal
+    | char-font
+    | char-greaterp
+    | char-int
+    | char-lessp
+    | char-name
+    | char-not-equal
+    | char-not-greaterp
+    | char-not-lessp
+    | char-upcase
+    | char/=
+    | char<
+    | char<=
+    | char=
+    | char>
+    | char>=
+    | character
+    | characterp
+    | check-type
+    | choose
+    | choose-if
+    | chunk
+    | cis
+    | class-name
+    | class-of
+    | clear-input
+    | close
+    | clrhash
+    | code-char
+    | coerce
+    | collect
+    | collect-alist
+    | collect-and
+    | collect-append
+    | collect-file
+    | collect-first
+    | collect-fn
+    | collect-hash
+    | collect-last
+    | collect-length
+    | collect-max
+    | collect-min
+    | collect-nconc
+    | collect-nth
+    | collect-or
+    | collect-plist
+    | collect-sum
+    | collecting
+    | collecting-fn
+    | commonp
+    | compile
+    | compile-file
+    | compile-file-pathname
+    | compiled-function-p
+    | compiler-let
+    | compiler-macro-function
+    | compiler-macroexpand
+    | compiler-macroexpand-1
+    | complement
+    | complex
+    | complexp
+    | compute-applicable-methods
+    | compute-restarts
+    | concatenate
+    | concatenated-stream-streams
+    | conjugate
+    | cons
+    | consp
+    | constantp
+    | continue
+    | copy-alist
+    | copy-list
+    | copy-pprint-dispatch
+    | copy-readtable
+    | copy-seq
+    | copy-symbol
+    | copy-tree
+    | cos
+    | cosh
+    | cotruncate
+    | count
+    | count-if
+    | count-if-not
+    | counting
+    | declaim
+    | declaration-information
+    | decode-float
+    | decode-universal-time
+    | delete
+    | delete-duplicates
+    | delete-file
+    | delete-if
+    | delete-if-not
+    | delete-package
+    | denominator
+    | deposit-field
+    | describe
+    | describe-object
+    | destructuring-bind
+    | digit-char
+    | digit-char-p
+    | directory
+    | directory-namestring
+    | disassemble
+    | do-all-keyword-symbols
+    | do-external-keyword-symbols
+    | do-keyword-symbols
+    | documentation
+    | dolist
+    | dpb
+    | dribble
+    | ecase
+    | echo-stream-input-stream
+    | echo-stream-output-stream
+    | ed
+    | eighth
+    | elt
+    | encapsulated
+    | enclose
+    | encode-universal-time
+    | endp
+    | enough-namestring
+    | ensure-generic-function
+    | error
+    | eval
+    | evalhook
+    | evenp
+    | every
+    | exp
+    | expand
+    | export
+    | expt
+    | f
+    | fboundp
+    | fdefinition
+    | ffloor
+    | fifth
+    | file-author
+    | file-error-pathname
+    | file-length
+    | file-namestring
+    | file-position
+    | file-string-length
+    | file-write-date
+    | fill
+    | fill-pointer
+    | find
+    | find-all-keyword-symbols
+    | find-class
+    | find-if
+    | find-if-not
+    | find-method
+    | find-package
+    | find-restart
+    | find-symbol
+    | finish-output
+    | first
+    | float
+    | float-digits
+    | float-precision
+    | float-radix
+    | float-sign
+    | floatp
+    | floor
+    | format
+    | formatter
+    | fourth
+    | funcall
+    | function-information
+    | function-keywords
+    | function-lambda-expression
+    | functionp
+    | gatherer
+    | gathering
+    | gcd
+    | generator
+    | generic-function
+    | gensym
+    | gentemp
+    | get
+    | get-decoded-time
+    | get-internal-real-time
+    | get-internal-run-time
+    | get-output-stream-string
+    | get-properties
+    | get-setf-method
+    | get-setf-method-multiple-value
+    | get-universal-time
+    | getf
+    | gethash
+    | graphic-char-p
+    | handler-bind
+    | handler-case
+    | hash-table-count
+    | hash-table-p
+    | hash-table-rehash-size
+    | hash-table-rehash-threshold
+    | hash-table-size
+    | hash-table-test
+    | host-namestring
+    | identity
+    | ignore-errors
+    | imagpart
+    | import
+    | in-package
+    | initialize-instance
+    | input-stream-p
+    | inspect
+    | int-char
+    | integer-decode-float
+    | integer-length
+    | integerp
+    | interactive-stream-p
+    | intern
+    | intersection
+    | invalid-method-error
+    | invoke-debugger
+    | invoke-restart
+    | isqrt
+    | iterate
+    | keywordp
+    | last
+    | latch
+    | lcm
+    | ldb
+    | ldb-test
+    | ldiff
+    | length
+    | lisp-implementation-type
+    | lisp-implementation-version
+    | list
+    | list-all-packages
+    | list-length
+    | list\*
+    | listen
+    | listp
+    | load
+    | load-logical-pathname-translations
+    | locally
+    | log
+    | logandc1
+    | logandc2
+    | logbitp
+    | logcount
+    | logical-pathname
+    | logical-pathname-translations
+    | lognand
+    | lognot
+    | logorc1
+    | logorc2
+    | logtest
+    | long-site-name
+    | loop-finish
+    | lower-case-p
+    | machine-instance
+    | machine-type
+    | machine-version
+    | macro-function
+    | macroexpand
+    | macroexpand-1
+    | make-array
+    | make-broadcast-stream
+    | make-char
+    | make-concatenated-stream
+    | make-condition
+    | make-dispatch-macro-character
+    | make-echo-stream
+    | make-hash-table
+    | make-instance
+    | make-instances-obsolete
+    | make-list
+    | make-load-form
+    | make-load-form-saving-slots
+    | make-package
+    | make-pathname
+    | make-random-state
+    | make-sequence
+    | make-string
+    | make-string-input-stream
+    | make-string-output-stream
+    | make-symbol
+    | make-synonym-stream
+    | make-two-way-stream
+    | makunbound
+    | map
+    | map-fn
+    | map-into
+    | maphash
+    | mapping
+    | mask
+    | mask-field
+    | maximize
+    | maximizing
+    | member
+    | member-if
+    | member-if-not
+    | memberp
+    | merge
+    | merge-pathnames
+    | method-combination-error
+    | method-qualifiers
+    | mingle
+    | minimize
+    | minimizing
+    | minusp
+    | mismatch
+    | muffle-warning
+    | multiple-value-bind
+    | multiple-value-list
+    | multiple-value-setq
+    | name-char
+    | namestring
+    | nbutlast
+    | nconc
+    | nconcing
+    | next-in
+    | next-method-p
+    | next-out
+    | nintersection
+    | ninth
+    | no-applicable-method
+    | no-next-method
+    | notany
+    | notevery
+    | nreconc
+    | nreverse
+    | nset-difference
+    | nset-exclusive-or
+    | nstring-capitalize
+    | nstring-downcase
+    | nstring-upcase
+    | nsublis
+    | nsubst
+    | nsubst-if
+    | nsubst-if-not
+    | nsubstitute
+    | nsubstitute-if
+    | nsubstitute-if-not
+    | nth
+    | nth-value
+    | nthcdr
+    | numberp
+    | numerator
+    | nunion
+    | oddp
+    | open
+    | open-stream-p
+    | output-stream-p
+    | package-error-package
+    | package-name
+    | package-nicknames
+    | package-shadowing-keyword-symbols
+    | package-use-list
+    | package-used-by-list
+    | packagep
+    | pairlis
+    | parse-integer
+    | parse-macro
+    | parse-namestring
+    | pathname
+    | pathname-device
+    | pathname-directory
+    | pathname-host
+    | pathname-match-p
+    | pathname-name
+    | pathname-type
+    | pathname-version
+    | pathnamep
+    | peek-char
+    | phase
+    | plusp
+    | pop
+    | position
+    | position-if
+    | position-if-not
+    | positions
+    | pprint-dispatch
+    | pprint-exit-if-list-exhausted
+    | pprint-fill
+    | pprint-indent
+    | pprint-linear
+    | pprint-logical-block
+    | pprint-newline
+    | pprint-pop
+    | pprint-tab
+    | pprint-tabular
+    | previous
+    | prin1
+    | print
+    | print-object
+    | print-unreadable-object
+    | probe-file
+    | producing
+    | prog1
+    | prog2
+    | progn
+    | provide
+    | psetf
+    | psetq
+    | push
+    | pushnew
+    | quote
+    | random
+    | random-state-p
+    | rassoc
+    | rassoc-if
+    | rassoc-if-not
+    | rational
+    | rationalize
+    | rationalp
+    | read
+    | read-byte
+    | read-char
+    | read-char-no-hang
+    | read-delimited-list
+    | read-from-string
+    | read-line
+    | read-preserving-whitespace
+    | readtable-case
+    | readtablep
+    | realp
+    | realpart
+    | reduce
+    | reinitialize-instance
+    | remf
+    | remhash
+    | remove
+    | remove-duplicates
+    | remove-method
+    | remprop
+    | rename-file
+    | rename-package
+    | replace
+    | require
+    | rest
+    | restart-bind
+    | restart-case
+    | restart-name
+    | result-of
+    | revappend
+    | reverse
+    | room
+    | rotatef
+    | round
+    | row-major-aref
+    | rplaca
+    | rplacd
+    | sbit
+    | scale-float
+    | scan
+    | scan-alist
+    | scan-file
+    | scan-fn
+    | scan-fn-inclusive
+    | scan-hash
+    | scan-lists-of-lists
+    | scan-lists-of-lists-fringe
+    | scan-multiple
+    | scan-plist
+    | scan-range
+    | scan-sublists
+    | scan-symbols
+    | schar
+    | search
+    | second
+    | series
+    | set
+    | set-char-bit
+    | set-difference
+    | set-dispatch-macro-character
+    | set-exclusive-or
+    | set-macro-character
+    | set-pprint-dispatch
+    | set-syntax-from-char
+    | setf
+    | setq
+    | seventh
+    | shadow
+    | shadowing-import
+    | shared-initialize
+    | shiftf
+    | short-site-name
+    | signal
+    | signum
+    | simple-bit-vector-p
+    | simple-condition-format-arguments
+    | simple-condition-format-string
+    | simple-string-p
+    | simple-vector-p
+    | sin
+    | sinh
+    | sixth
+    | sleep
+    | slot-boundp
+    | slot-exists-p
+    | slot-makunbound
+    | slot-missing
+    | slot-unbound
+    | slot-value
+    | software-type
+    | software-version
+    | some
+    | sort
+    | special-form-p
+    | split
+    | split-if
+    | sqrt
+    | stable-sort
+    | standard-char-p
+    | step
+    | store-value
+    | stream-element-type
+    | stream-error-stream
+    | stream-external-format
+    | streamp
+    | string
+    | string-capitalize
+    | string-downcase
+    | string-equal
+    | string-greaterp
+    | string-left-trim
+    | string-lessp
+    | string-not-equal
+    | string-not-greaterp
+    | string-not-lessp
+    | string-right-trim
+    | string-trim
+    | string-upcase
+    | string/=
+    | string<
+    | string<=
+    | string=
+    | string>
+    | string>=
+    | stringp
+    | sublis
+    | subseq
+    | subseries
+    | subsetp
+    | subst
+    | subst-if
+    | subst-if-not
+    | substitute
+    | substitute-if
+    | substitute-if-not
+    | subtypep
+    | sum
+    | summing
+    | svref
+    | sxhash
+    | symbol-function
+    | symbol-name
+    | symbol-package
+    | symbol-plist
+    | symbol-value
+    | symbolp
+    | synonym-stream-symbol
+    | tailp
+    | tan
+    | tanh
+    | tenth
+    | terminate-producing
+    | terpri
+    | third
+    | time
+    | to-alter
+    | trace
+    | translate-logical-pathname
+    | translate-pathname
+    | tree-equal
+    | truename
+    | truncate
+    | two-way-stream-input-stream
+    | two-way-stream-output-stream
+    | type-error-datum
+    | type-error-expected-type
+    | type-of
+    | typep
+    | unexport
+    | unintern
+    | union
+    | unread-char
+    | untrace
+    | unuse-package
+    | update-instance-for-different-class
+    | update-instance-for-redefined-class
+    | upgraded-array-element-type
+    | upgraded-complex-part-type
+    | upper-case-p
+    | use-package
+    | use-value
+    | user-homedir-pathname
+    | values
+    | values-list
+    | variable-information
+    | vector
+    | vector-pop
+    | vector-push
+    | vector-push-extend
+    | vectorp
+    | warn
+    | wild-pathname-p
+    | with-compilation-unit
+    | with-hash-table-iterator
+    | with-package-iterator
+    | with-simple-restart
+    | with-standard-io-syntax
+    | write
+    | write-byte
+    | write-char
+    | write-string
+    | write-to-string
+    | y-or-n-p
+    | yes-or-no-p
+    | zerop
+    ){{break}}
+
+  # Built-in atomic type specifiers
+  # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm
+  # Note: Some of them are scoped function when appearing as first list item.
+  builtin_types: |-
+    (?xi:
+      arithmetic-error
+    | array
+    | atom
+    | base-char
+    | base-string
+    | bignum
+    | bit
+    | bit-vector
+    | broadcast-stream
+    | built-in-class
+    | cell-error
+    | character
+    | class
+    | compiled-function
+    | complex
+    | concatenated-stream
+    | condition
+    | cons
+    | control-error
+    | division-by-zero
+    | double-float
+    | echo-stream
+    | end-of-file
+    | error
+    | extended-char
+    | file-error
+    | file-stream
+    | fixnum
+    | float
+    | floating-point-inexact
+    | floating-point-invalid-operation
+    | floating-point-overflow
+    | floating-point-underflow
+    | function
+    | generic-function
+    | hash-table
+    | integer
+    | keyword
+    | list
+    | logical-pathname
+    | long-float
+    | method
+    | method-combination
+    | number
+    | package
+    | package-error
+    | parse-error
+    | pathname
+    | print-not-readable
+    | program-error
+    | random-state
+    | ratio
+    | rational
+    | reader-error
+    | readtable
+    | real
+    | restart
+    | sequence
+    | serious-condition
+    | short-float
+    | signed-byte
+    | simple-array
+    | simple-base-string
+    | simple-bit-vector
+    | simple-condition
+    | simple-error
+    | simple-string
+    | simple-type-error
+    | simple-vector
+    | simple-warning
+    | single-float
+    | standard-char
+    | standard-class
+    | standard-generic-function
+    | standard-method
+    | standard-object
+    | storage-condition
+    | stream
+    | stream-error
+    | string
+    | string-stream
+    | structure-class
+    | structure-object
+    | style-warning
+    | symbol
+    | synonym-stream
+    | two-way-stream
+    | type-error
+    | unbound-slot
+    | unbound-variable
+    | undefined-function
+    | unsigned-byte
+    | vector
+    | warning
+    ){{break}}
+
+  builtin_variables: |-
+    \*(?xi:
+      applyhook
+    | break-on-signals
+    | break-on-warnings
+    | compile-file-pathname
+    | compile-file-truename
+    | compile-print
+    | compile-verbose
+    | debug-io
+    | debugger-hook
+    | default-pathname-defaults
+    | error-output
+    | evalhook
+    | features
+    | gensym-counter
+    | load-pathname
+    | load-print
+    | load-truename
+    | load-verbose
+    | macroexpand-hook
+    | modules
+    | package
+    | print-array
+    | print-base
+    | print-case
+    | print-circle
+    | print-escape
+    | print-gensym
+    | print-length
+    | print-level
+    | print-lines
+    | print-miser-width
+    | print-pprint-dispatch
+    | print-pretty
+    | print-radix
+    | print-readably
+    | print-right-margin
+    | query-io
+    | random-state
+    | read-base
+    | read-default-float-format
+    | read-eval
+    | read-suppress
+    | readtable
+    | standard-input
+    | standard-output
+    | suppress-series-warnings
+    | terminal-io
+    | trace-output
+    )\*{{break}}
