1. 节点类型
2. 解析状态
这些状态代表了解析器在处理输入代码时可能遇到的各种情况。以下是对这些状态的详细解释:
- IndexExpression:处理索引表达式,如
a[0]
。 - IndexExpressionFinish:完成索引表达式的处理。
- ArrayExpression:处理数组表达式,如
[T; N]
。 - ArrayExpressionSemi:处理数组表达式中的分号。
- ArrayExpressionFinish:完成数组表达式的处理。
- BraceExpression:处理大括号表达式的开始,如
{...}
。 - BraceExpressionParameter:处理大括号表达式中的参数。
- BraceExpressionParameterAfterDesignator:处理大括号表达式中的参数,该参数在一个指示符之后。
- BraceExpressionParameterFinish:完成大括号表达式中的参数处理。
- BraceExpressionFinish:完成大括号表达式的处理。
- CallExpression:处理调用表达式,如
func(...)
。 - CallExpressionParameterFinish:处理调用表达式中的参数后的逗号或括号。
- CallExpressionFinish:完成调用表达式的处理。
- CodeBlock:处理典型的代码块的开始,如
{...}
。 - CodeBlockFinish:完成代码块的处理。
- DeclarationNameAndParams:处理声明的名称和参数,如
Foo[...](...)
。 - DeclarationNameAndParamsAfterName:处理声明名称后的部分。
- DeclarationNameAndParamsAfterDeduced:处理推导参数后的部分。
- DeclarationScopeLoop:处理声明范围内的内容。
- Period:处理点操作,如
.
。 - ArrowExpression:处理箭头表达式,如
->
。 - Expression:处理表达式。
- ExpressionInPostfix:处理后缀表达式的开始部分。
- ExpressionInPostfixLoop:处理后缀表达式的循环部分。
- ExpressionLoop:处理表达式的循环部分。
- IfExpression:处理
if
表达式。 - ParenExpression:处理括号内的表达式,如
(expr)
。 - Statement:处理单个语句。
- StatementForHeader:处理
for
循环头部。 - StatementIf:处理
if
语句。 - StatementWhile:处理
while
循环。 - TypeIntroducer:处理类型的引入。
- Var:处理
var
声明。
此外,还有一些宏定义,如COCKTAIL_PARSE_STATE_VARIANT
和COCKTAIL_PARSE_STATE_VARIANTS2
,它们用于生成更多的状态,这些状态是基于其他状态但带有某种变体的。
总的来说,这些状态为解析器提供了一个框架,使其能够根据输入代码的不同部分进行适当的处理。