小编St.*_*rio的帖子

我们可以用 ANTLR 定义一个非上下文无关文法吗?

我对 ANTLR4 很陌生,现在我正在尝试了解我们可以用它定义哪种语法。

据我所知,ANTLR 中有两种规则:解析器规则(小写单词)和词法分析器规则(大写单词)。例子:

grammar Test;

init: prog(','prog)*;

prog: A
     | prog
     ;

A: [a-z]+;
Run Code Online (Sandbox Code Playgroud)

从语法产生式规则的角度来看,我会说解析器规则是非终端符号,可以用词法分析器规则定义的一系列标记替换。

因此,很明显,语法根据定义是与上下文无关。由语法生成的语言字母表由小写拉丁字母组成的所有单词组成。

问题:我们可以使用 定义非上下文无关文法ANTLR4吗?

java grammar parsing antlr4

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

创建一个新的 File 实例会导致创建一个空文件吗?

我阅读了javadocFile类。这是那里写的:

通过将给定的路径名​​字符串转换为抽象路径名来创建一个新的 File 实例。如果给定的字符串是空字符串,则结果是空的抽象路径名。

问题:是否保证如果文件不存在就不会创建空文件或取决于系统?我在 RedHat linux 上尝试过,只有在我创建OutputStream.

从java对我来说并不明显。

java file

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

将Map [String,Double]转换为java.util.Map [String,java.lang.Double]

我认为我们可以依赖于转换scala.Double为的隐式转换java.lang.Double.所以我尝试了以下方法:

import scala.collection.JavaConverters._

object Main extends App {
  def main(args: Array[String]) = {
    val m = Map("10" -> 20.0)
    doSome(m.asJava) //error. Type mismatch found: java.util.Map[String,scala.Double]
                     //                  required: java.util.Map[String,java.lang.Double]
    doSome2(m.asJava)
  }
  def doSome(m: java.util.Map[java.lang.String, java.lang.Double]) = println(m)
  def doSome2(m: java.util.Map[java.lang.String, Double]) = println(m)
}
Run Code Online (Sandbox Code Playgroud)

为什么不起作用?执行此类转换的惯用方法是什么?

scala type-conversion

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

Scala排序的地图没有方法floor或ceil

我是斯卡拉的新手,但现在我想用它scala.collection.SortedMap来翻新地板.我的意思是这样的:

val m = SortedMap[Long, String]()

def retreiveAndProcess(l: Long) = {
    val floor = // get the floor of l to m
    //do some with floor
}
Run Code Online (Sandbox Code Playgroud)

collections scala

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

Scala中的模式匹配和变量

我是Scala的新手,对模式匹配的工作原理有点疑惑.想象一下,我有以下几点:

case class Cls(i: Int)

case b @ Cls(i) => //Ok
case e : Cls => //Ok
case f @ Cls => //Ok
case s: Cls(i) =>  //compile error
case str: String => //ok
Run Code Online (Sandbox Code Playgroud)

我不太明白在哪里使用@以及在哪里使用:.是否有一些严格定义的规则?

scala pattern-matching

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

了解Scala中的monad变压器

我试图了解如何使用Monad变形金刚。我阅读了有关它的Wiki文章,但仍有一些疑问。

我们的IOmonad需要读取用户的输入。但是并非总是提供输入。就是这样Option。为简化起见,我们可以定义一个OptionT“封装” IO单子动作的单子。

在我的特殊情况下,我有两个类型为Future[Option[String]]和的单子Future[List[Int]]。就是说,为简化起见,我需要两个不同的转换器,ListT[T]并且OptionT[T]对于每种monad类型,我都需要在其中嵌入Future行为...对吗?

monads scala

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

了解Scala Future和Thhen

我正在尝试使用andThen方法来注册未来的行动阶段.像这样:

implicit val executionContext = ExecutionContext.global

val f = Future(0)
f.andThen {
  case r => println(r.get + "1")
} andThen {
  case r => println(r.get + "2")
}
Run Code Online (Sandbox Code Playgroud)

由于此方法异步执行并且不生成返回值,因此抛出的任何非致命异常都将报告给ExecutionContext.

异步是什么意思?它意味着与未来的执行本身异步?

scala future

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

了解java中的内存分配和GC

我试图了解垃圾收集算法的工作原理.我正在读这篇文章.据我所知,每一个分配都发生在Young一代.如果没有足够的可用空间可以Minor GC触发清洁Young代(Eden,S1,S2).但现在想象我们有一些类:

public class TestYoungCrash{
    private long l1;
    private long l2;
    //...
    private long l100000000;
    //tons of other fields
}
Run Code Online (Sandbox Code Playgroud)

所以即使这一代人完全清楚,班级的目标也不适合年轻一代.

那会发生什么?它是标准化的吗?

java garbage-collection

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

Spark历史日志手动解压

我在使用 spark 历史服务器时遇到了一些问题,因此尝试lz4手动解压缩日志。我安装liblz4-tool并下载了应用程序日志application_1510049252849_0303.lz4。但是当lz4 ~/application_1510049252849_0303.lz4我解压缩它时出现以下错误:

Error 44 : Unrecognized header : file cannot be decoded 
Run Code Online (Sandbox Code Playgroud)

这是我对每个火花历史lz4文件都有的。解决办法是什么?有没有办法手动打开?

java scala apache-spark lz4

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

用for-comprehension替换flatMap/map链

我正在尝试使用for -reherehension以下内容:

val s: Seq[Option[Int]] = //...
val t: Option[Int] = //...

s.map(sv => t.flatMap(tv => sv.map(_ == tv))) 
Run Code Online (Sandbox Code Playgroud)

我试过这个:

val r: Seq[Option[Boolean]] = for(
  sv <- s;
  tv <- t;
  svv <- sv
) yield svv == tv //Seq[Boolean] does not conform to Seq[Option[Boolean]]
Run Code Online (Sandbox Code Playgroud)

有没有办法简明扼要地写for-comprehension

scala for-comprehension

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