Case-Of宏
在Nim中,可以使用具有 case-of 表达式的语法的宏,区别在于所有分支都传递给宏实现并由宏实现处理。 然后是宏实现将 of-branches 转换为有效的Nim语句。 以下示例应显示如何将此功能用于词法分析器。
- import macros
- macro case_token(args: varargs[untyped]): untyped =
- echo args.treeRepr
- # 从正则表达式创建词法分析器
- # ... (实现留给读者作为练习 ;-)
- discard
- case_token: # 这个冒号告诉解析器它是一个宏语句
- of r"[A-Za-z_]+[A-Za-z_0-9]*":
- return tkIdentifier
- of r"0-9+":
- return tkInteger
- of r"[\+\-\*\?]+":
- return tkOperator
- else:
- return tkUnknown
风格注释 :为了代码可读性,最好使用功能最少但仍然足够的编程结构。所以“检查清单”是:
- 如果可能,请使用普通的proc和iterator。
- 否则:如果可能,使用泛型的proc和iterator。
- 否则:如果可能,请使用模板。
- 否则:使用宏。