squeak(Smalltalk)字符串中的搜索正则表达式

问题描述 投票:1回答:1

[我正在尝试编写一个'compile'方法,该方法获取一个字符串和一个集合,并查看字符串是否符合条件。方法签名是:

compile: stringCode where: argTypeCollection

使用示例(假设C是类):

C compile: 
'first: i second: any third: n
| local |
   local := i + n.
  ^(local*local)'
where: #(Integer nil Number).

该方法应该做的第一件事是通过检查参数数是否正确来分析字符串,我想到了使用正则表达式进行分析。我试图寻找正则表达式使用说明herehere,但唯一的示例是文件,并且我没有成功扫描字符串并计算[a-zA-z] [a-zA-Z0- 9] *:同样。

在吱吱声中对字符串使用正则表达式的任何示例都会有所帮助。

regex smalltalk squeak
1个回答
0
投票

分析Smalltalk源代码时,最好的选择是使用Smalltalk编译器用于解析,编译和评估方法和代码片段的对象。换句话说,拥有齐全的编译工具供您使用,将正则表达式用于此类任务几乎没有任何意义。

例如,您可以像这样使用Parser分析方法的标头(即,源代码中定义选择器和形式参数的部分)>

Parser new parse: aString class: aClass

其中aString是方法的源代码,aClass是目标类,即该方法有意义的类。

在您的示例中,类别为C。但是请注意,当源代码不包含对ivars的引用(或与此相关的类或共享变量)时,参数aClass变得无关紧要,可以用Object代替。

parse:class:消息的结果,如果解析成功,将是一个抽象解析树(也称为AST),其节点将带来更多信息,可用于进一步分析。如果解析失败,您将可以访问解析错误对象,该对象将使您确定为什么代码与Smalltalk语法不一致。如您所见,您将拥有在分析中的源代码上需要反映的所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.