Case-Of宏

在Nim中,可以使用具有 case-of 表达式的语法的宏,区别在于所有分支都传递给宏实现并由宏实现处理。 然后是宏实现将 of-branches 转换为有效的Nim语句。 以下示例应显示如何将此功能用于词法分析器。

  1. import macros
  2.  
  3. macro case_token(args: varargs[untyped]): untyped =
  4. echo args.treeRepr
  5. # 从正则表达式创建词法分析器
  6. # ... (实现留给读者作为练习 ;-)
  7. discard
  8.  
  9. case_token: # 这个冒号告诉解析器它是一个宏语句
  10. of r"[A-Za-z_]+[A-Za-z_0-9]*":
  11. return tkIdentifier
  12. of r"0-9+":
  13. return tkInteger
  14. of r"[\+\-\*\?]+":
  15. return tkOperator
  16. else:
  17. return tkUnknown

风格注释 :为了代码可读性,最好使用功能最少但仍然足够的编程结构。所以“检查清单”是:

  • 如果可能,请使用普通的proc和iterator。
  • 否则:如果可能,使用泛型的proc和iterator。
  • 否则:如果可能,请使用模板。
  • 否则:使用宏。