[ : ctxt : aBlock | | p-6ren">
gpt4 book ai didi

parsing - 使用smalltalk编写一个小解析器,如何使用创建的方法'标识符?

转载 作者:行者123 更新时间:2023-12-04 06:18:15 25 4
gpt4 key购买 nike

我现在有一个方法

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'

最佳答案

'proc' asParser 返回一个接受字符串 'proc' 的解析器;这类似于返回接受字符 $p 的解析器的 $p asParser

我想您的问题是关于如何引用解析器产品。在 PPCompositeParser 的子类中,您可以通过创建一个返回其解析器的方法来做到这一点(您已经这样做了)。然后产生式通过读取各自的同名实例变量来相互引用(除非使用 PetitParser 工具,否则您必须自己创建这些实例变量)。

您可以在 documentation 中找到有关复合解析器的教程。 .

关于parsing - 使用smalltalk编写一个小解析器,如何使用创建的方法'标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com