我目前有一个方法
pMain
| parser |
parser := 'proc' asParser, #space asParser, "<---- im trying to use the method identifier here - so i tried self identifier, instead of 'proc' asParser
#letter asParser plus, $( asParser,
'int' asParser,#space asParser,
#letter asParser plus, $) asParser,
#space asParser, 'corp' asParser.
^ parser
我也有这两种方法
1-关键字方法
keywords
^ keywords ifNil: [
keywords := Set newFrom: #(
proc corp
if then else fi
do od
print as
while
for from to by
return
int string real array format bool
true false
mutable static
)
]
2-标识符方法
identifier
^ ((#letter asParser , #word asParser star) flatten) >=> [ : ctxt : aBlock | | parse |
parse := aBlock value.
(self keywords includes: parse) ifTrue: [
PPFailure message: 'keyword matched' context: ctxt
] ifFalse: [
parse
]]
问题:如何在pMain中使用标识符解析器?
我这行喂它
MyParser new pMain:= 'proc a( int a ) corp'
答案 0 :(得分:6)
'proc' asParser
返回一个接受字符串'proc'
的解析器;这类似于$p asParser
,它返回一个接受字符$p
的解析器。
我猜你的问题是如何引用解析器制作。在PPCompositeParser
的子类中,您可以通过创建返回其解析器的方法(您这样做)来完成此操作。然后通过读取相同名称的相应实例变量来相互引用(除非您使用PetitParser工具,否则必须自己创建)。
您可以在documentation中找到有关复合解析器的教程。