标签: petitparser

在Pharo解析PetitParser的评论

是否有更简单的方法来解析1行注释?

comment
    ^ '//' asParser ,
      (#any asParser starLazy: (#newline asParser)) ,
      #newline asParser
                  ==> [ :result | nil "Ignore comments" ]
program
    ^ (comment / instruction) star
        ==> [ :result | N2TProgramNode new
                                setNodes: (result copyWithout: nil) ]
Run Code Online (Sandbox Code Playgroud)

我特别不确定(#newline asParser)和#copyWithout:的重复.

在Lukas的回答之后,我提出了更简单的以下解决方案:

program
    ^ programEntity star
        ==> [ :result | N2TProgramNode new setNodes: result]

programEntity
    ^ instruction trim: ignorable

ignorable
    ^ comment / #space asParser

comment
    ^ '//' asParser ,  #newline asParser negate star
Run Code Online (Sandbox Code Playgroud)

smalltalk pharo petitparser

10
推荐指数
1
解决办法
265
查看次数

我在哪里可以找到更多使用PetitParser的例子?

我正在寻找使用PetitParser以及测试包中提供的PPArithmeticParser和PPLambdaParser以及Lukas的几篇博客文章的其他示例?如果有人愿意与他们分享,那将非常感激.

更新:https
://github.com/NicolasPetton/jtalk/blob/master/st/parser.st更新:https://github.com/dmatveev/waste/blob/master/wastex.st

让他们来吧!

parsing smalltalk visualworks pharo petitparser

10
推荐指数
1
解决办法
781
查看次数

使用PetitParser在Smalltalk字符串中查找标记

我想解析

'This,is,an,example,text'
Run Code Online (Sandbox Code Playgroud)

就像在findTokens中一样

'This,is,an,example,text' findTokens: $, 
an OrderedCollection('This' 'is' 'an' 'example' 'text')
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚怎么用PetitParser,delimitedBy:和separatedBy:没有帮助我,我尝试过

( #any asParser delimitedBy: $, asParser ) plus flatten parse:  'This,is,an,example,text'
Run Code Online (Sandbox Code Playgroud)

但显然没有用

parsing smalltalk petitparser

7
推荐指数
1
解决办法
956
查看次数

如何在PetitParser中定义Pascal变量

这是我试图在PetitParser中实现的(简化的)EBNF部分:

variable :: component / identifier
component :: indexed / field
indexed :: variable , $[ , blah , $]
field :: variable , $. , identifier
Run Code Online (Sandbox Code Playgroud)

我所做的是将所有这些产品(除外identifier)添加为我的子类的ivars,PPCompositeParser并定义相应的方法如下:

variable
  ^component / self identifier

component
  ^indexed / field

identifier
  ^(#letter asParser, (#word asParser) star) flatten

indexed
  ^variable , $[ asParser, #digit asParser, $] asParser

field
  ^variable , $. asParser, self identifier

start
  ^variable
Run Code Online (Sandbox Code Playgroud)

最后,我创建了一个新的解析器实例并向其发送了消息parse: 'a.b[0]'.

问题:我得到了堆栈溢出.

smalltalk petitparser

5
推荐指数
2
解决办法
81
查看次数

使用PetitParser定义左关联解析器

http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/中,定义了ExpressionGrammar.但是,它是正确联想的

parser parse: '1 + 2 + 6'.    ======> #(1 $+ #(2 $+ 6))
Run Code Online (Sandbox Code Playgroud)

我怎样才能使它成为左关联的呢

parser parse: '1 + 2 + 6'.
Run Code Online (Sandbox Code Playgroud)

结果是

#(#(1 $+ 2) $+ 6)
Run Code Online (Sandbox Code Playgroud)

smalltalk pharo petitparser

5
推荐指数
1
解决办法
99
查看次数

@override Dart 代码

我注意到PetitParserDart@override在代码中有很多,但我不知道如何检查它们?

我尝试了 IDEA dart-plugin for @override,但它根本没有效果。我们如何@override与 Dart 一起使用?

overriding dart petitparser dart-mirrors

5
推荐指数
2
解决办法
1万
查看次数

如何在 PetitParser 中使用但不捕获一些字符?

我定义了一个规则:

def("invokation", char('@').word().plus().flatten());
Run Code Online (Sandbox Code Playgroud)

对于“@who”,它将匹配并得到@who结果。

怎么问它只返回who而不带@

parsing dart petitparser

5
推荐指数
1
解决办法
175
查看次数

如何使用PetitParser解析以关键字开头的标识符?

我想使用PetitParser解析编程语言中的标识符.

其中一个要求是标识符的名称不是关键字(例如null),因此它null不是有效的标识符.

我能为这种情况考虑的最小解析器是:

identifier := ('null' asParser not,  #word asParser plus)
Run Code Online (Sandbox Code Playgroud)

但是,如果输入以关键字开头,则失败:

identifier end parse: 'nullable'
Run Code Online (Sandbox Code Playgroud)

你有什么建议可以解决这个问题吗?谢谢!

parsing smalltalk petitparser

4
推荐指数
1
解决办法
123
查看次数

PetitParser解析规则如何发出错误信号?

我想要一个只识别0到32767之间的数字的解析规则.我尝试过类似的东西:

integerConstant
  ^ (#digit asParser min: 1 max: 5) flatten
      ==> [ :string | | value |
            value := string asNumber.
            (value between: 0 and: 32767)
              ifTrue: [ value ]
              ifFalse: [ **???** ]]
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么写??? 我想过返回一个PPFailure,但这需要知道流的位置.

smalltalk pharo petitparser

3
推荐指数
1
解决办法
121
查看次数

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

我目前有一个方法

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
Run Code Online (Sandbox Code Playgroud)

我也有这两种方法

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 …
Run Code Online (Sandbox Code Playgroud)

parsing smalltalk pharo petitparser

3
推荐指数
1
解决办法
283
查看次数