2016-01-03 85 views
0

我在分隔符組合器上留有空白。即使關鍵字是「keywordandthetheoftofthestream」中的前綴,它們也會使用關鍵字。此外,identifier = rep1("a")消耗a a中的兩個字母作爲單個aa。這些信息表明我需要做一些處理,並且可以將解析器組合器放在詞法分析器的頂部。關於詞法分析器的教程

我看到有一個特殊的Lexical解析器來達到這個目的。但爲什麼實際上這個分詞器的標記化?有什麼意義?爲什麼它更有優勢?它的EOLwhitespace方法有什麼意義?它與skipWhitespace有什麼關係,我在RegexParsers看到?此外,我找不到在詞法分析器頂部堆疊解析器的任何示例。在我看來,更高級的RegexParsers使用Input,這是一個字符流。它怎麼可能是一個令牌流?

順便說一句,有可能建立位置跟蹤(line:col)到那個?

回答

1

rep1一個RegexParsers內將其稱之爲解析事物之間skipWhitespace - 這意味着你要帶有兩個aSeq。這如RegexParsers中所述。

如果你想獲得line:col數據,有你的結果類型的解析的擴展Position,幷包裹在一個呼叫解析器positioned

object Parser extends RegexParsers { 
    case class MyType(value: String) extends Positional 
    val myType: Parser[MyType] = positioned { "typey" ^^ { MyType.apply } } 
}