宏包含一个循环
Macro contains a cycle
所以我正在尝试为 scheme 制作一个词法分析器,当我 运行 JFlex 转换 lever.flex 文件时,我得到一个类似于这个的错误,例如:
Reading "lexer.flex"
Macro definition contains a cycle.
1 error, 0 warnings.
它指的是这个宏:
definition = {variable_definition}
| {syntax_definition}
| \(begin {definition}*\)
| \(let-syntax \({syntax_binding}*\){definition}*\)
| \(letrec-syntax \({syntax_binding}*\){definition}*\)
此处定义的所有宏都已实现,但出于某种原因我无法摆脱这个错误,我也不知道为什么会发生。
lex/flex/JFlex 样式“定义”是一个宏扩展,如该错误消息所示。递归宏扩展是不可能的,因为宏扩展不是有条件的;试图扩大
definition = ... \(begin {definition}*\) ...
将产生无限长的正则表达式。
不要将词法分析器误认为是 general-purpose 解析器。词法分析器只是将输入拆分为单独的标记(或“词位”),使用正则表达式来识别每个标记。令牌没有结构(至少为了解析的目的);一旦标记被识别,它就是一个不可分割的对象。如果您发现自己编写的词法描述与结构化文本相匹配,那么您几乎可以肯定已经将词法分析推到了极限。
解析器使用允许递归描述(但前瞻性非常有限)并且可以创建输入的递归描述(例如解析树)的算法。
所以我正在尝试为 scheme 制作一个词法分析器,当我 运行 JFlex 转换 lever.flex 文件时,我得到一个类似于这个的错误,例如:
Reading "lexer.flex"
Macro definition contains a cycle.
1 error, 0 warnings.
它指的是这个宏:
definition = {variable_definition}
| {syntax_definition}
| \(begin {definition}*\)
| \(let-syntax \({syntax_binding}*\){definition}*\)
| \(letrec-syntax \({syntax_binding}*\){definition}*\)
此处定义的所有宏都已实现,但出于某种原因我无法摆脱这个错误,我也不知道为什么会发生。
lex/flex/JFlex 样式“定义”是一个宏扩展,如该错误消息所示。递归宏扩展是不可能的,因为宏扩展不是有条件的;试图扩大
definition = ... \(begin {definition}*\) ...
将产生无限长的正则表达式。
不要将词法分析器误认为是 general-purpose 解析器。词法分析器只是将输入拆分为单独的标记(或“词位”),使用正则表达式来识别每个标记。令牌没有结构(至少为了解析的目的);一旦标记被识别,它就是一个不可分割的对象。如果您发现自己编写的词法描述与结构化文本相匹配,那么您几乎可以肯定已经将词法分析推到了极限。
解析器使用允许递归描述(但前瞻性非常有限)并且可以创建输入的递归描述(例如解析树)的算法。