c# - 如何标记 Coco/R 中的缩进(Python、Boo 类缩进)

标签 c# cocor

有没有一种众所周知的方法,如何在 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/

相关文章:

c# - 从 C# 应用程序生成和解析 Python 代码

c# - 调试作为 VS 解决方案的一部分运行的 NuGet

c# - MVC 5 全局用户帐户对象

c# - C# 中的 Google Analytics API - 请求执行失败 : https://www. google.com/analytics/feeds/accounts/default

c# - "async Task"成员(member)问题

java - C# - 在一行中将多个元素添加到 IList

delphi - Coco/R 可以将解析后的文件转换为字节码吗?

swift - 使用 Coco/R 翻译源代码后如何测试输入条件?