[我正在尝试编写一个'compile'方法,该方法获取一个字符串和一个集合,并查看字符串是否符合条件。方法签名是:
compile: stringCode where: argTypeCollection
使用示例(假设C是类):
C compile:
'first: i second: any third: n
| local |
local := i + n.
^(local*local)'
where: #(Integer nil Number).
该方法应该做的第一件事是通过检查参数数是否正确来分析字符串,我想到了使用正则表达式进行分析。我试图寻找正则表达式使用说明here和here,但唯一的示例是文件,并且我没有成功扫描字符串并计算[a-zA-z] [a-zA-Z0- 9] *:同样。
在吱吱声中对字符串使用正则表达式的任何示例都会有所帮助。
分析Smalltalk源代码时,最好的选择是使用Smalltalk编译器用于解析,编译和评估方法和代码片段的对象。换句话说,拥有齐全的编译工具供您使用,将正则表达式用于此类任务几乎没有任何意义。
例如,您可以像这样使用Parser
分析方法的标头(即,源代码中定义选择器和形式参数的部分)>
Parser new parse: aString class: aClass
其中
aString
是方法的源代码,aClass
是目标类,即该方法有意义的类。
在您的示例中,类别为C
。但是请注意,当源代码不包含对ivars的引用(或与此相关的类或共享变量)时,参数aClass
变得无关紧要,可以用Object
代替。
parse:class:
消息的结果,如果解析成功,将是一个抽象解析树(也称为AST),其节点将带来更多信息,可用于进一步分析。如果解析失败,您将可以访问解析错误对象,该对象将使您确定为什么代码与Smalltalk语法不一致。如您所见,您将拥有在分析中的源代码上需要反映的所有内容。