# `Grammar.IR.CustomLexeme`
[🔗](https://github.com/joetjen/ichor/blob/v0.3.0/lib/grammar/ir/custom_lexeme.ex#L1)

`@native("Module", "function", dep1, ...)` at *token* position: a
token whose entire body is hand-written Elixir code (an
`Ichor.CustomLexeme` implementation) instead of ordinary character-level
combinators -- the escape hatch for lexical constructs no fixed
maximal-munch tokenizer can express (a heredoc's dynamic terminator, a
string literal with embedded interpolated expressions).

Unlike `Grammar.IR.Custom` (the rule-position sibling), this always
stands alone as an entire token definition -- it can't be referenced
from another token's body (there's no compiled entry point for
`{:call, name}` to jump into) and can't be composed inside a larger
token expression. `deps` names the *rules* (never tokens) this
callback may call back into via the re-lex-and-match primitive
`c:Ichor.CustomLexeme.scan/3` receives. `nullable` is the same
author-supplied stand-in `Grammar.IR.Custom` uses, defaulting to
`false`; there's no `leading` here since left-recursion-cycle
detection is a rule-level concept only.

# `t`

```elixir
@type t() :: %Grammar.IR.CustomLexeme{
  deps: [atom()],
  function: atom(),
  meta: Grammar.IR.Meta.t(),
  module: module(),
  nullable: boolean()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
