LGFileParser class
- 扩展
-
Parser
构造函数
LGFile |
属性
继承属性
atn | 获取识别器用于预测的 serializedATN。 |
build |
在分析期间跟踪 <xref:ParserRuleContext> 对象,并使用 <xref:ParserRuleContext%23children> 列表将它们挂钩,以便形成分析树。 从开始规则返回的 <xref:ParserRuleContext> 表示分析树的根。 请注意,如果不生成分析树,规则上下文只会向上点。 当规则退出时,它将返回上下文,但如果没有人持有引用,则会回收垃圾。 它向上点,但没有人指向它。 生成分析树时,我们将所有这些上下文添加到 <xref:ParserRuleContext%23children> 列表。 然后,上下文不是垃圾回收的候选项。 |
context | |
current |
匹配需要返回当前输入符号,该符号将放入关联标记 ref 的标签中;例如,x=ID。 |
EOF | |
error |
|
input |
设置令牌流并重置分析程序。 |
interpreter | 设置识别器用于预测的 ATN 解释器。 |
is |
|
is |
在分析期间,有时有助于侦听规则进入和退出事件以及令牌匹配。 这是用于快速和脏调试。 |
number |
获取分析期间报告的语法错误数。 每次调用 <xref:%23notifyErrorListeners> 时,都会递增此值。 请参阅 #notifyErrorListeners |
parse |
|
precedence | 获取最高优先级规则的优先级别。 |
rule |
|
source |
|
state | 指示识别器已更改与传入的 ATN 状态一致的内部状态。 这样,我们总是知道我们在 ATN 中的位置,因为分析器一直在。 规则上下文对象构成一个堆栈,用于查看调用规则的堆栈。 结合这一点,我们已获得完整的 ATN 配置信息。 |
token |
方法
comment |
|
error |
|
file() | |
import |
|
option |
|
paragraph() | |
template |
|
template |
|
template |
|
template |
继承的方法
action(Rule |
|
add |
|
add |
注册 对于以下特定异常,对侦听器事件的调用 确定性,即对于相同的输入,对侦听器方法的调用将相同。
|
compile |
获取树模式的首选方法。 例如,下面是一个示例用法:
|
compile |
与 [int](xref:%23compileParseTreePattern(字符串%2C)相同,但指定 LGFileLexer,而不是尝试从此分析器推断它。 |
consume() | 使用并返回当前符号
如果分析程序未处于错误恢复模式,则使用符号会使用 <xref:ParserRuleContext%23addChild(TerminalNode)>添加到分析树中,并在任何分析侦听器上调用 <xref:ParseTreeListener%23visitTerminal>。 如果分析程序 处于错误恢复模式,则使用符号会使用 [Token](xref:%23createErrorNode(ParserRuleContext%2C)添加到分析树中,然后在任何分析侦听器上调用 <xref:ParserRuleContext%23addErrorNode(ErrorNode)> 和 <xref:ParseTreeListener%23visitErrorNode>。 |
create |
如何创建与父级关联的令牌的错误节点。 通常,要创建的错误节点不是父级的函数。 |
create |
如何创建与父节点关联的令牌叶节点。 通常,要创建的终端节点不是父级的函数。 |
dumpDFA() | 用于调试和其他目的。 |
enter |
|
enter |
|
enter |
|
enter |
在进入规则时,始终由生成的分析程序调用。 Access 字段 <xref:%23_ctx> 获取当前上下文。 |
exit |
|
get |
使用旁路替代项的 ATN 非常昂贵,因此我们懒散地创建它。
@ 如果当前分析程序未实现 |
get |
用于调试和其他目的。 |
get |
错误标头是什么,通常是行/字符位置信息? |
get |
|
get |
|
get |
计算可以分别遵循当前分析器状态和上下文的输入符号集,<xref:%23getState> 和 <xref:%23getContext>。 请参阅 ATN#getExpectedTokens(int、RuleContext) |
get |
|
get |
|
get |
|
get |
获取规则的索引(即 |
get |
从规则名称到规则索引获取映射。 用于 XPath 和树模式编译。 |
get |
返回列表<字符串> 分析器实例中导致对当前规则的调用。 如果需要更多详细信息(例如调用 ATN 中规则的位置的文件/行信息),可以重写。 这对于错误消息非常有用。 |
get |
|
get |
从令牌名称到令牌类型获取映射。 用于 XPath 和树模式编译。 |
in |
|
is |
检查
|
match(number) | 将当前输入符号与 |
match |
将当前输入符号匹配为通配符。 如果符号类型匹配(即值大于 0),则调用 <xref:ANTLRErrorStrategy%23reportMatch> 和 <xref:%23consume> 来完成匹配过程。
如果符号类型不匹配,则对当前错误策略调用 <xref:ANTLRErrorStrategy%23recoverInline> 以尝试恢复。 如果 <xref:%23getBuildParseTree> |
notify |
|
notify |
|
precpred(Rule |
|
push |
与 <xref:%23enterRule> 类似,但对于递归规则。 将当前上下文设置为传入 localctx 的子级。 |
remove |
|
remove |
|
remove |
从分析侦听器列表中删除 请参阅 #addParseListener |
remove |
删除所有分析侦听器。 请参阅 #addParseListener |
reset() | 重置分析程序的状态 |
reset(boolean) | |
sempred(Rule |
|
set |
|
unroll |
构造函数详细信息
LGFileParser(TokenStream)
new LGFileParser(input: TokenStream)
参数
- input
-
TokenStream
属性详细信息
COMMENT
public static COMMENT: 3 = 3
属性值
3
ESCAPE_CHARACTER
public static ESCAPE_CHARACTER: 11 = 11
属性值
11
grammarFileName
string grammarFileName
属性值
string
IMPORT
public static IMPORT: 4 = 4
属性值
4
INLINE_MULTILINE
public static INLINE_MULTILINE: 6 = 6
属性值
6
INVALID_LINE
public static INVALID_LINE: 9 = 9
属性值
9
MULTILINE_PREFIX
public static MULTILINE_PREFIX: 7 = 7
属性值
7
MULTILINE_SUFFIX
public static MULTILINE_SUFFIX: 10 = 10
属性值
10
MULTILINE_TEXT
public static MULTILINE_TEXT: 12 = 12
属性值
12
NEWLINE
public static NEWLINE: 1 = 1
属性值
1
OPTION
public static OPTION: 2 = 2
属性值
2
ruleNames
public static ruleNames: string[] = [
"file", "paragraph", "commentDefinition", "importDefinition", "optionDefinition",
"errorDefinition", "templateDefinition", "templateNameLine", "templateBody",
"templateBodyLine",
]
属性值
string[]
ruleNames
string[] ruleNames
属性值
string[]
RULE_commentDefinition
public static RULE_commentDefinition: 2 = 2
属性值
2
RULE_errorDefinition
public static RULE_errorDefinition: 5 = 5
属性值
5
RULE_file
public static RULE_file: 0 = 0
属性值
0
RULE_importDefinition
public static RULE_importDefinition: 3 = 3
属性值
3
RULE_optionDefinition
public static RULE_optionDefinition: 4 = 4
属性值
4
RULE_paragraph
public static RULE_paragraph: 1 = 1
属性值
1
RULE_templateBody
public static RULE_templateBody: 8 = 8
属性值
8
RULE_templateBodyLine
public static RULE_templateBodyLine: 9 = 9
属性值
9
RULE_templateDefinition
public static RULE_templateDefinition: 6 = 6
属性值
6
RULE_templateNameLine
public static RULE_templateNameLine: 7 = 7
属性值
7
serializedATN
string serializedATN
属性值
string
TEMPLATE_BODY
public static TEMPLATE_BODY: 8 = 8
属性值
8
TEMPLATE_NAME_LINE
public static TEMPLATE_NAME_LINE: 5 = 5
属性值
5
VOCABULARY
public static VOCABULARY: Vocabulary = new VocabularyImpl(LGFileParser._LITERAL_NAMES, LGFileParser._SYMBOLIC_NAMES, [])
属性值
Vocabulary
vocabulary
Vocabulary vocabulary
属性值
Vocabulary
继承属性详细信息
atn
buildParseTree
在分析期间跟踪 <xref:ParserRuleContext> 对象,并使用 <xref:ParserRuleContext%23children> 列表将它们挂钩,以便形成分析树。 从开始规则返回的 <xref:ParserRuleContext> 表示分析树的根。 请注意,如果不生成分析树,规则上下文只会向上点。 当规则退出时,它将返回上下文,但如果没有人持有引用,则会回收垃圾。 它向上点,但没有人指向它。
生成分析树时,我们将所有这些上下文添加到 <xref:ParserRuleContext%23children> 列表。 然后,上下文不是垃圾回收的候选项。
buildParseTree: boolean
属性值
boolean
继承自 Parser.buildParseTree
context
context: ParserRuleContext
属性值
ParserRuleContext
继承自 Parser.context
currentToken
匹配需要返回当前输入符号,该符号将放入关联标记 ref 的标签中;例如,x=ID。
currentToken: Token
属性值
Token
继承自 Parser.currentToken
EOF
static EOF: number
属性值
number
继承自 Recognizer.EOF 的
errorHandler
errorHandler: ANTLRErrorStrategy
属性值
ANTLRErrorStrategy
继承自 Parser.errorHandler
inputStream
设置令牌流并重置分析程序。
inputStream: TokenStream
属性值
TokenStream
继承自 Parser.inputStream
interpreter
设置识别器用于预测的 ATN 解释器。
interpreter: ParserATNSimulator
属性值
ParserATNSimulator
继承自 Recognizer.interpreter
isMatchedEOF
isMatchedEOF: boolean
属性值
boolean
继承自 Parser.isMatchedEOF
isTrace
在分析期间,有时有助于侦听规则进入和退出事件以及令牌匹配。 这是用于快速和脏调试。
isTrace: boolean
属性值
boolean
继承自 Parser.isTrace
numberOfSyntaxErrors
获取分析期间报告的语法错误数。 每次调用 <xref:%23notifyErrorListeners> 时,都会递增此值。
请参阅 #notifyErrorListeners
numberOfSyntaxErrors: number
属性值
number
继承自 Parser.numberOfSyntaxErrors
parseInfo
parseInfo: Promise<ParseInfo | undefined>
属性值
Promise<ParseInfo | undefined>
继承自 Parser.parseInfo
precedence
获取最高优先级规则的优先级别。
precedence: number
属性值
number
继承自 Parser.precedence
ruleContext
ruleContext: ParserRuleContext
属性值
ParserRuleContext
继承自 Parser.ruleContext
sourceName
sourceName: string
属性值
string
继承自 Parser.sourceName
state
指示识别器已更改与传入的 ATN 状态一致的内部状态。 这样,我们总是知道我们在 ATN 中的位置,因为分析器一直在。 规则上下文对象构成一个堆栈,用于查看调用规则的堆栈。 结合这一点,我们已获得完整的 ATN 配置信息。
state: number
属性值
number
继承自 Recognizer.state
tokenFactory
tokenFactory: TokenFactory
属性值
TokenFactory
继承自 Parser.tokenFactory
方法详细信息
commentDefinition()
errorDefinition()
file()
importDefinition()
optionDefinition()
paragraph()
templateBody()
templateBodyLine()
templateDefinition()
templateNameLine()
继承的方法详细信息
action(RuleContext | undefined, number, number)
function action(_localctx: RuleContext | undefined, ruleIndex: number, actionIndex: number)
参数
- _localctx
-
RuleContext | undefined
- ruleIndex
-
number
- actionIndex
-
number
继承自 Recognizer.action
addErrorListener(ANTLRErrorListener<Token>)
function addErrorListener(listener: ANTLRErrorListener<Token>)
参数
- listener
-
ANTLRErrorListener<Token>
继承自 Recognizer.addErrorListener
addParseListener(ParseTreeListener)
注册 listener
以在分析过程中接收事件。
为了支持输出保留语法转换(包括但不限于左递归删除、自动左因素处理和优化代码生成),分析期间对侦听器方法的调用可能与分析完成后使用的 <xref:ParseTreeWalker%23DEFAULT> 调用有很大不同。 具体而言,在分析期间,规则进入和退出事件的顺序可能与分析器之后不同。 此外,可以省略对某些规则条目方法的调用。
对于以下特定异常,对侦听器事件的调用 确定性,即对于相同的输入,对侦听器方法的调用将相同。
- 对用于生成代码的语法的更改可能会更改侦听器调用的行为。
- 生成分析器时传递给 ANTLR 4 的命令行选项的更改可能会更改侦听器调用的行为。
- 更改用于生成分析程序的 ANTLR 工具的版本可能会更改侦听器调用的行为。
function addParseListener(listener: ParseTreeListener)
参数
- listener
-
ParseTreeListener
要添加的侦听器
继承自 Parser.addParseListener
compileParseTreePattern(string, number)
获取树模式的首选方法。 例如,下面是一个示例用法:
let t: ParseTree = parser.expr();
let p: ParseTreePattern = await parser.compileParseTreePattern("<ID>+0", MyParser.RULE_expr);
let m: ParseTreeMatch = p.match(t);
let id: string = m.get("ID");
function compileParseTreePattern(pattern: string, patternRuleIndex: number): Promise<ParseTreePattern>
参数
- pattern
-
string
- patternRuleIndex
-
number
返回
Promise<ParseTreePattern>
继承自 Parser.compileParseTreePattern
compileParseTreePattern(string, number, Lexer)
与 [int](xref:%23compileParseTreePattern(字符串%2C)相同,但指定 LGFileLexer,而不是尝试从此分析器推断它。
function compileParseTreePattern(pattern: string, patternRuleIndex: number, lexer?: Lexer): Promise<ParseTreePattern>
参数
- pattern
-
string
- patternRuleIndex
-
number
- lexer
-
Lexer
返回
Promise<ParseTreePattern>
继承自 Parser.compileParseTreePattern
consume()
使用并返回当前符号A
为当前看头符号,此函数将光标移动到 B
并返回 A
。
A B
^
如果分析程序未处于错误恢复模式,则使用符号会使用 <xref:ParserRuleContext%23addChild(TerminalNode)>添加到分析树中,并在任何分析侦听器上调用 <xref:ParseTreeListener%23visitTerminal>。 如果分析程序 处于错误恢复模式,则使用符号会使用 [Token](xref:%23createErrorNode(ParserRuleContext%2C)添加到分析树中,然后在任何分析侦听器上调用 <xref:ParserRuleContext%23addErrorNode(ErrorNode)> 和 <xref:ParseTreeListener%23visitErrorNode>。
function consume(): Token
返回
Token
继承自 Parser.consume
createErrorNode(ParserRuleContext, Token)
如何创建与父级关联的令牌的错误节点。 通常,要创建的错误节点不是父级的函数。
function createErrorNode(parent: ParserRuleContext, t: Token): ErrorNode
参数
- parent
-
ParserRuleContext
- t
-
Token
返回
ErrorNode
继承自 Parser.createErrorNode
createTerminalNode(ParserRuleContext, Token)
如何创建与父节点关联的令牌叶节点。 通常,要创建的终端节点不是父级的函数。
function createTerminalNode(parent: ParserRuleContext, t: Token): TerminalNode
参数
- parent
-
ParserRuleContext
- t
-
Token
返回
TerminalNode
继承自 Parser.createTerminalNode
dumpDFA()
用于调试和其他目的。
function dumpDFA()
继承自 Parser.dumpDFA
enterLeftFactoredRule(ParserRuleContext, number, number)
function enterLeftFactoredRule(localctx: ParserRuleContext, state: number, ruleIndex: number)
参数
- localctx
-
ParserRuleContext
- state
-
number
- ruleIndex
-
number
继承自 Parser.enterLeftFactoredRule
enterOuterAlt(ParserRuleContext, number)
function enterOuterAlt(localctx: ParserRuleContext, altNum: number)
参数
- localctx
-
ParserRuleContext
- altNum
-
number
继承自 Parser.enterOuterAlt
enterRecursionRule(ParserRuleContext, number, number, number)
function enterRecursionRule(localctx: ParserRuleContext, state: number, ruleIndex: number, precedence: number)
参数
- localctx
-
ParserRuleContext
- state
-
number
- ruleIndex
-
number
- precedence
-
number
继承自 Parser.enterRecursionRule
enterRule(ParserRuleContext, number, number)
在进入规则时,始终由生成的分析程序调用。 Access 字段 <xref:%23_ctx> 获取当前上下文。
function enterRule(localctx: ParserRuleContext, state: number, ruleIndex: number)
参数
- localctx
-
ParserRuleContext
- state
-
number
- ruleIndex
-
number
继承自 Parser.enterRule
exitRule()
function exitRule()
继承自 Parser.exitRule
getATNWithBypassAlts()
使用旁路替代项的 ATN 非常昂贵,因此我们懒散地创建它。
@ 如果当前分析程序未实现 serializedATN
属性。
function getATNWithBypassAlts(): ATN
返回
ATN
继承自 Parser.getATNWithBypassAlts
getDFAStrings()
用于调试和其他目的。
function getDFAStrings(): string[]
返回
string[]
继承自 Parser.getDFAStrings
getErrorHeader(RecognitionException)
错误标头是什么,通常是行/字符位置信息?
function getErrorHeader(e: RecognitionException): string
参数
- e
-
RecognitionException
返回
string
继承自 Recognizer.getErrorHeader
getErrorListenerDispatch()
function getErrorListenerDispatch(): ParserErrorListener
返回
ParserErrorListener
继承自 Parser.getErrorListenerDispatch
getErrorListeners()
function getErrorListeners(): Array<ANTLRErrorListener<Token>>
返回
Array<ANTLRErrorListener<Token>>
继承自 Recognizer.getErrorListeners
getExpectedTokens()
计算可以分别遵循当前分析器状态和上下文的输入符号集,<xref:%23getState> 和 <xref:%23getContext>。
请参阅 ATN#getExpectedTokens(int、RuleContext)
function getExpectedTokens(): IntervalSet
返回
IntervalSet
继承自 Parser.getExpectedTokens
getExpectedTokensWithinCurrentRule()
function getExpectedTokensWithinCurrentRule(): IntervalSet
返回
IntervalSet
继承自 Parser.getExpectedTokensWithinCurrentRule
getInvokingContext(number)
function getInvokingContext(ruleIndex: number): ParserRuleContext | undefined
参数
- ruleIndex
-
number
返回
ParserRuleContext | undefined
继承自 Parser.getInvokingContext
getParseListeners()
function getParseListeners(): ParseTreeListener[]
返回
ParseTreeListener[]
继承自 Parser.getParseListeners
getRuleIndex(string)
获取规则的索引(即 RULE_ruleName
字段)或 -1(如果未找到)。
function getRuleIndex(ruleName: string): number
参数
- ruleName
-
string
返回
number
继承自 Parser.getRuleIndex
getRuleIndexMap()
从规则名称到规则索引获取映射。 用于 XPath 和树模式编译。
function getRuleIndexMap(): ReadonlyMap<string, number>
返回
ReadonlyMap<string, number>
继承自 Recognizer.getRuleIndexMap
getRuleInvocationStack(RuleContext)
返回列表<字符串> 分析器实例中导致对当前规则的调用。 如果需要更多详细信息(例如调用 ATN 中规则的位置的文件/行信息),可以重写。 这对于错误消息非常有用。
function getRuleInvocationStack(ctx?: RuleContext): string[]
参数
- ctx
-
RuleContext
返回
string[]
继承自 Parser.getRuleInvocationStack
getTokenType(string)
function getTokenType(tokenName: string): number
参数
- tokenName
-
string
返回
number
继承自 Recognizer.getTokenType
getTokenTypeMap()
从令牌名称到令牌类型获取映射。 用于 XPath 和树模式编译。
function getTokenTypeMap(): ReadonlyMap<string, number>
返回
ReadonlyMap<string, number>
继承自 Recognizer.getTokenTypeMap
inContext(string)
function inContext(context: string): boolean
参数
- context
-
string
返回
boolean
继承自 Parser.inContext
isExpectedToken(number)
检查 symbol
是否可以遵循 ATN 中的当前状态。 此方法的行为等效于以下内容,但已实现,因此不需要显式构造完整的上下文敏感关注集。
return getExpectedTokens().contains(symbol);
function isExpectedToken(symbol: number): boolean
参数
- symbol
-
number
要检查的符号类型
返回
boolean
如果 symbol
可以遵循 ATN 中的当前状态,则 true
否则 false
。
继承自 Parser.isExpectedToken
match(number)
将当前输入符号与 ttype
匹配。 如果符号类型匹配,则调用 <xref:ANTLRErrorStrategy%23reportMatch> 和 <xref:%23consume> 来完成匹配过程。
如果符号类型不匹配,则对当前错误策略调用 <xref:ANTLRErrorStrategy%23recoverInline> 以尝试恢复。 如果 <xref:%23getBuildParseTree>true
,<xref:ANTLRErrorStrategy%23recoverInline> 返回的符号的标记索引为 -1,则通过调用 [Token] (xref:%23createErrorNode(ParserRuleContext%2C) 将符号添加到分析树中,然后 <xref:ParserRuleContext%23addErrorNode(ErrorNode)>。
function match(ttype: number): Token
参数
- ttype
-
number
要匹配的标记类型
返回
Token
匹配的符号 @ 如果当前输入符号与 ttype
不匹配,并且错误策略无法从不匹配的符号中恢复
继承自 Parser.match
matchWildcard()
将当前输入符号匹配为通配符。 如果符号类型匹配(即值大于 0),则调用 <xref:ANTLRErrorStrategy%23reportMatch> 和 <xref:%23consume> 来完成匹配过程。
如果符号类型不匹配,则对当前错误策略调用 <xref:ANTLRErrorStrategy%23recoverInline> 以尝试恢复。 如果 <xref:%23getBuildParseTree>true
,<xref:ANTLRErrorStrategy%23recoverInline> 返回的符号的标记索引为 -1,则通过调用 [Token](xref:Parser%23createErrorNode(ParserRuleContext%2C)将符号添加到分析树中,然后 <xref:ParserRuleContext%23addErrorNode(ErrorNode)>。
function matchWildcard(): Token
返回
Token
匹配的符号 @ 如果当前输入符号与通配符不匹配,并且错误策略无法从不匹配的符号中恢复
继承自 Parser.matchWildcard
notifyErrorListeners(string)
function notifyErrorListeners(msg: string)
参数
- msg
-
string
继承自 Parser.notifyErrorListeners
notifyErrorListeners(string, Token | null, RecognitionException | undefined)
function notifyErrorListeners(msg: string, offendingToken: Token | null, e: RecognitionException | undefined)
参数
- msg
-
string
- offendingToken
-
Token | null
- e
-
RecognitionException | undefined
继承自 Parser.notifyErrorListeners
precpred(RuleContext, number)
function precpred(localctx: RuleContext, precedence: number): boolean
参数
- localctx
-
RuleContext
- precedence
-
number
返回
boolean
继承自 Parser.precpred
pushNewRecursionContext(ParserRuleContext, number, number)
与 <xref:%23enterRule> 类似,但对于递归规则。 将当前上下文设置为传入 localctx 的子级。
function pushNewRecursionContext(localctx: ParserRuleContext, state: number, ruleIndex: number)
参数
- localctx
-
ParserRuleContext
- state
-
number
- ruleIndex
-
number
继承自 Parser.pushNewRecursionContext
removeErrorListener(ANTLRErrorListener<Token>)
function removeErrorListener(listener: ANTLRErrorListener<Token>)
参数
- listener
-
ANTLRErrorListener<Token>
继承自 Recognizer.removeErrorListener
removeErrorListeners()
function removeErrorListeners()
继承自 Recognizer.removeErrorListeners
removeParseListener(ParseTreeListener)
从分析侦听器列表中删除 listener
。
如果 listener
undefined
或尚未添加为分析侦听器,则此方法不执行任何操作。
请参阅 #addParseListener
function removeParseListener(listener: ParseTreeListener)
参数
- listener
-
ParseTreeListener
要删除的侦听器
继承自 Parser.removeParseListener
removeParseListeners()
删除所有分析侦听器。
请参阅 #addParseListener
function removeParseListeners()
继承自 Parser.removeParseListeners
reset()
重置分析程序的状态
function reset()
继承自 Parser.reset
reset(boolean)
function reset(resetInput: boolean)
参数
- resetInput
-
boolean
继承自 Parser.reset
sempred(RuleContext | undefined, number, number)
function sempred(_localctx: RuleContext | undefined, ruleIndex: number, actionIndex: number): boolean
参数
- _localctx
-
RuleContext | undefined
- ruleIndex
-
number
- actionIndex
-
number
返回
boolean
继承自 Recognizer.sempred
setProfile(boolean)
function setProfile(profile: boolean): Promise<void>
参数
- profile
-
boolean
返回
Promise<void>
继承自 Parser.setProfile
unrollRecursionContexts(ParserRuleContext)
function unrollRecursionContexts(_parentctx: ParserRuleContext)
参数
- _parentctx
-
ParserRuleContext
继承自 Parser.unrollRecursionContexts