docs: mention that token($.foo) is illegal
This commit is contained in:
parent
0109c877d5
commit
792cbde728
1 changed files with 9 additions and 1 deletions
|
|
@ -252,7 +252,15 @@ for tree-sitter. However, plenty of features are supported by default:
|
|||
* **Left Associativity : `prec.left([number], rule)`** - This function marks the given rule as left-associative (and optionally applies a numerical precedence). When an LR(1) conflict arises in which all of the rules have the same numerical precedence, Tree-sitter will consult the rules' associativity. If there is a left-associative rule, Tree-sitter will prefer matching a rule that ends *earlier*. This works similarly to [associativity directives][yacc-prec] in Yacc grammars.
|
||||
* **Right Associativity : `prec.right([number], rule)`** - This function is like `prec.left`, but it instructs Tree-sitter to prefer matching a rule that ends *later*.
|
||||
* **Dynamic Precedence : `prec.dynamic(number, rule)`** - This function is similar to `prec`, but the given numerical precedence is applied at *runtime* instead of at parser generation time. This is only necessary when handling a conflict dynamically using the `conflicts` field in the grammar, and when there is a genuine *ambiguity*: multiple rules correctly match a given piece of code. In that event, Tree-sitter compares the total dynamic precedence associated with each rule, and selects the one with the highest total. This is similar to [dynamic precedence directives][bison-dprec] in Bison grammars.
|
||||
* **Tokens : `token(rule)`** - This function marks the given rule as producing only a single token. Tree-sitter's default is to treat each String or RegExp literal in the grammar as a separate token. Each token is matched separately by the lexer and returned as its own leaf node in the tree. The `token` function allows you to express a complex rule using the functions described above (rather than as a single regular expression) but still have Tree-sitter treat it as a single token.
|
||||
* **Tokens : `token(rule)`** - This function marks the given rule as producing only
|
||||
a single token. Tree-sitter's default is to treat each String or RegExp literal
|
||||
in the grammar as a separate token. Each token is matched separately by the lexer
|
||||
and returned as its own leaf node in the tree. The `token` function allows you to
|
||||
express a complex rule using the functions described above (rather than as a single
|
||||
regular expression) but still have Tree-sitter treat it as a single token.
|
||||
The token function will only accept terminal rules, so `token($.foo)` will not work.
|
||||
You can think of it as a shortcut for squashing complex rules of strings or regexes
|
||||
down to a single token.
|
||||
* **Immediate Tokens : `token.immediate(rule)`** - Usually, whitespace (and any other extras, such as comments) is optional before each token. This function means that the token will only match if there is no whitespace.
|
||||
* **Aliases : `alias(rule, name)`** - This function causes the given rule to *appear* with an alternative name in the syntax tree. If `name` is a *symbol*, as in `alias($.foo, $.bar)`, then the aliased rule will *appear* as a [named node][named-vs-anonymous-nodes-section] called `bar`. And if `name` is a *string literal*, as in `alias($.foo, 'bar')`, then the aliased rule will appear as an [anonymous node][named-vs-anonymous-nodes-section], as if the rule had been written as the simple string.
|
||||
* **Field Names : `field(name, rule)`** - This function assigns a *field name* to the child node(s) matched by the given rule. In the resulting syntax tree, you can then use that field name to access specific children.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue