- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个编程语言语法,我想在 PPCompositeParser 的几个子类中展开(例如,一个类将处理指令,另一个类将处理表达式,另一个类将处理程序结构)。我想这样做是为了避免获得一个包含数十个实例变量的大类。
我的问题是这些子语法有循环依赖:结构语法引用了语句语法的'statement'规则,它引用了表达式语法的'expression'规则,它引用了结构语法的'subroutineName'(关闭依赖循环)。我尝试了简单的方法,例如,表达式语法中的 #subroutineName 方法如下所示:
MyExpressionGrammar>>subroutineName
^ N2TJStructureParser newStartingAt: #subroutineName
PPParser subclass: #PPDeferedParser
instanceVariableNames: 'creationBlock'
classVariableNames: ''
poolDictionaries: ''
category: 'PetitParser-Tools'
PPDeferedParser>>parseOn: aStream
^ creationBlock value parseOn: aStream
MyExpressionGrammar>>subroutineName
^ PPDederedParser creationBlock: [N2TJStructureParser newStartingAt: #subroutineName]
最佳答案
当前将复合解析器拆分为多个 PPCompositeParser
PetitParser 不直接支持子类。
请记住,如果您使用 PetitParser 浏览器,则无需担心实例变量,它们会自动为您管理。此外,您不必为每个产品都需要一个实例变量。例如,终端可以在您直接调用的方法中。
你的解决方案当然也有效,但它并不是那么好,因为它需要你仔细注意你想要如何连接你的语法。同样在您的实现中,您应该延迟缓存结果,否则您的代码将在解析时创建新的复合解析器。这是非常昂贵的。
撇开所有这些不谈,当然可以改进 PPCompositeParser
支持多个子类之间的依赖关系,例如通过声明构造函数将准备、初始化和最终解析的依赖的其他解析器。
关于smalltalk - 自引用 PetitParser 的 PPCompositeParsers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390459/
PetitParser 中的规则是分布式的吗? 有以下规则: integerLiteral --> hexIntegerLiteral / octalIntegerLiteral / decimalI
我想要一个只识别 0 到 32767 之间的数字的解析规则。我尝试了类似的方法: integerConstant ^ (#digit asParser min: 1 max: 5) flatten
我定义了一个规则: def("invokation", char('@').word().plus().flatten()); 对于“@who”,它将匹配并得到 @who结果。 怎么问才回who没有
据我所知,PetitParser 使用同名的生产方法初始化每个实例变量。应该怎么做,例如添加自定义实例变量并在 initialize 方法中对其进行初始化? 最佳答案 您可以覆盖子类中的类端方法#ig
我想使用 PetitParser 解析编程语言中的标识符。 要求之一是标识符的名称不是关键字(例如 null ),因此 null将不是有效的标识符。 对于这种情况,我能想到的最小解析器是: ident
有一个内置whitespace()解析器在 PetitParserDart ,它检查字符: (9 <= value && value <= 13) || (value == 32) || (value
在 http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/ ,定义了一个ExpressionGrammar。然而,它是右关联的
我正在尝试实现 BNF for EPD在 Pharo/PetitParser 中。 digit18 := $1 asParser / $2 asParser / $3 asParser / $4 as
我正在尝试用 PetitParser 制作一个基本的数学解析器,并且我无法使用非对称二元运算符(如减法或除法)获得正确的顺序。 我有这个小例子,它只能解析(非负)整数和 - 二元运算符,并发出一个带有
petitparser是用 dart 编写的解析器生成器用于例如在 Flutter . 根据 this page , petitparser允许使用 ref0 来引用当前的解析类。 在使用语法定义部分
是否有像 plus() 这样具有上限的解析器,可以对 Item <- [a-zA-Z0-9]{1,5} 这样的表达式进行建模? 对于像Item <- [a-zA-Z0-9]{3,5}这样的东西也类似。
在 PetitParser2 中,如何匹配一组封闭的标记,例如月份名称?例如。 (伪代码)[:单词 | MonthNames anySatisfy: [ :mn | mn beginsWith: wo
我有一个编程语言语法,我想在 PPCompositeParser 的几个子类中展开(例如,一个类将处理指令,另一个类将处理表达式,另一个类将处理程序结构)。我想这样做是为了避免获得一个包含数十个实例变
我正在考虑在我的项目中使用 petitparser for Dart ( https://pub.dartlang.org/packages/petitparser )。我想用它来处理存储为字符串的
这是我试图在 PetitParser 中实现的(简化的)EBNF 部分: variable :: component / identifier component :: indexed / field
我想解析 'This,is,an,example,text' 就像在 findTokens 中一样 'This,is,an,example,text' findTokens: $, an Ordere
据我所知,PetitParser是一个解析器,我们可以定义语法和 Action 来解析一些文本。 我已经成功地使用它内置的 JSON 解析器来解析一些 JSON 字符串,但我想做更多。我想编写一个 J
我是一名优秀的程序员,十分优秀!