有没有一种众所周知的方法,如何在 Coco/R 中实现像 Python/Boo 中那样的标记化缩进?
Coco/R 忽略空格,但我需要以某种方式根据下一行缩进生成 beginBlock/endBlock 标记。
现在,我使用预处理器,它插入“{”、“}”和“;”在输入流中,通过比较行之间的缩进。在 Coco/R 语法中,我使用花括号作为 beginBlock/endBlock 标记。如果输入流没有注释(也可以嵌套),它会很好地工作。一旦出现无序评论,意图比较逻辑就会失败。
实现一个预处理器,它跟踪评论对我来说看起来像是过度设计。
所以问题是,通常可以用 Coco/R 解析基于缩进的语法吗? 或者我应该尝试其他方法吗?
最佳答案
找到了一个理想的方法来做到这一点。
用方法包装 GetNextToken 比较下一个流的位置 与最后一个标记。
如果 position.Y 改变了,但是 position.X增加N个tabs,注入(inject)N个 虚拟 INDENT 代币。
如果 position.Y 改变了,但是 position.X 减少N个标签,注入(inject)N个 虚拟 DENDENT 代币。
如果 position.Y 改变了,但是 position.X不是,注入(inject)virtual SEPARATOR token 。
如果 position.Y 没有改变,返回 原始下一个 token 。
如果之前的标记是软中断(在 python 中), 忽略上面的逻辑。
关于c# - 如何标记 Coco/R 中的缩进(Python、Boo 类缩进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289438/