解析器组合器:如何终止关键字重复

2023-12-08

我试图弄清楚如何使用关键字终止单词的重复。一个例子:

class CAQueryLanguage extends JavaTokenParsers {
    def expression = ("START" ~ words ~ "END") ^^ { x =>
        println("expression: " + x);
        x
    }
    def words = rep(word) ^^ { x =>
        println("words: " + x)
        x
    }
    def word = """\w+""".r
}

当我执行时

val caql = new CAQueryLanguage
caql.parseAll(caql.expression, "START one two END")

它打印words: List(one, two, END),表示words解析器已经消耗了END我的输入中存在关键字,导致表达式解析器无法匹配。我想END不匹配words,这将允许expression才能成功解析。


这是你想要的?

import scala.util.parsing.combinator.syntactical._

object CAQuery extends StandardTokenParsers {
    lexical.reserved += ("START", "END")
    lexical.delimiters += (" ")

    def query:Parser[Any]= "START" ~> rep1(ident) <~ "END"

    def parse(s:String) = {
       val tokens = new lexical.Scanner(s)
       phrase(query)(tokens)
   }   
}

println(CAQuery.parse("""START a END"""))       //List(a)
println(CAQuery.parse("""START a b c END"""))   //List(a, b, c)

如果您想了解更多详细信息,您可以查看这篇博文

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析器组合器:如何终止关键字重复 的相关文章

  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • IntelliJ IDEA Scala 插件问题

    我对新的 Intellij IDEA 10 和 Scala 插件有疑问 当我在 Scala 源文件中输入任何内容时 编辑器会永久冻结 在其他文件 java 和其他 编辑器中效果很好 结构视图 scala 检查和显示成员功能已关闭 堆大小增加
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • HTML 和 BeautifulSoup:当结构事先不知道时如何迭代解析?

    我从一个简单的 HTML 结构开始 如下所示 感谢 alecxe 的帮助 我能够创建这个 JSON 字典 u Outer List u Inner List u info 1 u info 2 u info 3 使用他的代码 from bs
  • ANTLR4 在导入时找不到语法

    我正在尝试将 ANTLR4 语法拆分为多个文件 以便我可以更轻松地测试它们 我在 java 项目中使用 gradle 作为构建工具 两种语法都单独正确编译 但是当我将导入添加到我的主语法中时 我收到下一个编译错误 错误 110 kaneko
  • 新式(“内联”)宏需要 scala.meta

    我刚刚更新到 scala meta 2 0 0 M1 和最新的 scala 2 12 3 现在宏不再编译 我所做的唯一更改是将元版本从 1 8 0 更改为 2 0 0 M1 错误 新式 内联 宏需要 scala meta 有谁知道是否有快速
  • 如何在 Java 中解析这样的 URI

    我正在尝试解析以下 URI http translate google com zh CN en 你 http translate google com zh CN 7Cen 7C E4 BD A0 但收到此错误消息 java net UR
  • 尝试解解析 json 字符串,但得到 Expected start of the object '{', but had 'EOF' 相反

    我正在尝试使用 kotlin 可序列化将 json 文件解析为列表 这是我的数据类 Serializable data class Book val epub String val fb2 String val mobi String va
  • 如何在 Android Lollipop 中使用注释修复 Android Jackson 解析期间的 IncompleteClassChangeError?

    在我们的 Android 应用程序中 我们在模型中使用 Jackson Annotations JsonTypeInfo use JsonTypeInfo Id NAME include JsonTypeInfo As PROPERTY p
  • Scala 相当于 Java 的 Number

    我正在尝试为数值域类型构建类型层次结构 例如AYear is an Int 这是一个Number a Percentage is a Double 这是一个Number等等 我需要层次结构以便我可以调用toInt or toDouble关于
  • 正则表达式会减慢程序速度

    我正在尝试创建一个程序来解析游戏聊天日志中的数据 到目前为止 我已经设法让程序运行并解析我想要的数据 但我的问题是程序变得越来越慢 目前解析 10MB 文本文件需要 5 秒 我注意到如果我将 RegexOptions Compiled 添加
  • 如何发现 Scala 远程 Actor 已死亡?

    在 Scala 中 当另一个 远程 actor 终止时 可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link 方法来通知一个 actor 在这种情况下 当远程参与者通过调用 exit 结束其工作时 第一个参与者
  • 使用 Spray-json 解析简单数组

    我正在尝试 但失败了 了解 Spray json 如何将 json feed 转换为对象 如果我有一个简单的 key gt value json feed 那么它似乎可以正常工作 但是我想要读取的数据出现在如下列表中 name John a
  • 解析 (yyyy-MM-dd) 格式的字符串日期

    我有一个 2013 09 18 形式的字符串 我想将其转换为 java util Date 我正在做这个 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date converted
  • Scala 如何忽略 Java 的检查异常?

    例如如果调用 JavaThread sleep这会抛出一个已检查的InterruptedException来自 Scala 源文件 然后不需要将调用包含在 Scala 中try catch Scala 如何删除将调用包围在 a 中的规则tr
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 对 Scala Not Null 特征的库支持

    Notice 从 Scala 2 11 开始 NotNull已弃用 据我了解 如果您希望引用类型不可为空 则必须混合魔法NotNull特征 编译器会自动阻止你输入null 可以值在里面 看到这个邮件列表线程 http www nabble
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写

随机推荐

  • 如何阻止向联系人拨出电话和短信(防止酒后拨号)

    我正在为一门课程制作一个 Android 应用程序 以防止用户在喝醉时打电话或发短信 基本上 在他们开始喝酒之前 他们会启动应用程序 该应用程序会阻止所有给他们的联系人打出的电话和短信 直到他们回答数学问题以证明他们的清醒 我在尝试阻止呼叫
  • 编辑已编译程序集的 C# 资源文件

    我有一个资源文件 我在其中存储类库的连接字符串等 我不能使用 App config 不要问为什么 我的假设 可能是一个愚蠢的假设 是 我能够在运行时修改已编译程序集之外的 rex 文件 以便能够通过环境更改连接字符串 而无需每次重新编译程序
  • 尝试将二进制文件读取为文本,但扫描仪停在第一行

    我正在尝试读取二进制文件 但我的程序只是停在第一行 我认为这是因为该文件具有奇怪的字符 我只想从中提取一些指示 有没有办法做到这一点 public static void main String args throws IOExceptio
  • Rails JavaScript 视图在生产环境中不起作用

    我的 Rails 应用程序遇到无法解释的问题 我在应用程序的所有部分都使用了大量 JavaScript 在开发中一切工作正常 但在生产中似乎我的 javascript 中的代码views没有被执行 这特别奇怪 因为页面上的所有其他 Java
  • 是否有使用 PDO 关闭 mysql 准备好的语句的函数?

    在 mysqli 准备好的语句中有mysqli stmt close 关闭准备好的声明 stmt gt close 我搜索了 php net 和网络 但找不到 PDO 的替代品 这可能吗 在每个脚本的末尾使用它有什么好处 我明白那个 con
  • 在 XCODE 中检查互联网连接时如何返回 BOOL

    我希望能够在加载视图时检查互联网连接 预先确定我的观点的内容 我有以下 viewDidLoad 方法 void viewDidLoad super viewDidLoad if self hasInternetConnection NSLo
  • 路由错误:url 中的用户名

    我有一个关于 Rails 3 的问题 我想让我的用户控制器显示页面具有 app com people username url Route resources users match people username gt users sho
  • MySQL 搜索并用通配符替换 - 查询

    是否可以在使用通配符的同时执行 MySQL 搜索和替换 eg search id wildcard houselisting rental gt replace class house rentals gt query UPDATE tab
  • 可达性网络更改事件未触发

    我的 iPhone 应用程序非常简单 只有一个视图可以处理所有事情 在 viewDidLoad 中我检查是否有互联网连接 如果有 我们从网络加载 如果没有 我们从本地资源加载 这很好用 in viewDidOnload NSNotifica
  • 我可以使用类助手调用静态私有类方法吗?

    我特别觉得有必要TCharacter IsLatin1这是private type TCharacterHelper class helper for TCharacter public class function IsLatin1 C
  • JavaFX 2 StringProperty 在封闭方法返回之前不会更新字段

    我想更新 JavaFX 应用程序中的标签 以便文本在方法运行时多次更改 private void analyze labelString setValue Analyzing labelString is bound to the Labe
  • 禁用 wpf 窗口上的鼠标事件以及放置在其上的用户控件

    我有一个 wpf 窗口 上面有许多用户控件 我应该使用哪个事件 函数来限制主窗口上的鼠标输入以及它所托管的用户控件 Try the UIElement IsHitTestVisible财产
  • CSS 将比例转换为背景图像

    我很喜欢 CSS 部分对图像的影响 split banner right cl hover img webkit transform scale 1 1 transform scale 1 1 我需要将上面的 CSS 应用到 div 元素中
  • MongoDB - 使用聚合管道进行评论赞成/反对

    我正在尝试实现评论的赞成 反对机制 类似于 reddit 上的赞成 反对机制 我有一个单独的集合 名为commentReputation里面的文档可以是这样的 id ObjectId 5e5acb6d6034a879655c8819 com
  • 如何打开;另存为;然后从 PowerShell4 关闭 Excel 2013(启用宏)工作簿

    对上述 Com 操作进行搜索会产生 09 年甚至更早的链接 也许它没有改变 但我发现自己遇到了 它正在被另一个进程使用 的错误 即使我的桌面上没有打开 Excel 应用程序 我必须重新启动才能恢复 需要明确的是 我正在尝试打开一个现有文件
  • Heroku 应用程序启动超时

    我有一个相当大的 2 3 升级到 Rails 3 应用程序 它足够厚 无法通过 Heroku 的 60 秒启动门 因此它崩溃了 我已经做了很多工作来最大限度地减少 Gems 和初始化程序中的加载时间 但是有一些随机过程会消耗时间 而且我不太
  • C 解读声明

    好吧 这对我来说有点太多了 您如何阅读这些声明 char myCBT 10 请注意 我并不是专门要求提供这个示例 而是要求像我这样的初学者面临这样的难题时的一般经验法则 使用大卫 安德森的顺时针螺旋规则用于阅读此类符号
  • System.IO.FileSystemWatcher 的底层是如何工作的?

    我想了解 System IO FileSystemWatcher 在幕后是如何工作的 因为我有一个要求 我需要查看 100 个或更多文件夹下的所有文件 其中每个文件夹将包含大约 1K 个文件 我不确定我是否使用 FileSystemwatc
  • HiveUDF + saxon 9.1.0.8 + Java8 = 未能创建 XPathFactory

    我的 Spark 作业使用 HiveContext 和 Saxon 工作正常 除非代码中没有定义 UDF 在 UDF 实现的情况下 HiveContext 初始化失败并出现错误 我听说 saxon 9 5 1 5 中解决了 saxon ja
  • 解析器组合器:如何终止关键字重复

    我试图弄清楚如何使用关键字终止单词的重复 一个例子 class CAQueryLanguage extends JavaTokenParsers def expression START words END x gt println exp