当前位置: 首页>>代码示例>>Scala>>正文


Scala Parsers类代码示例

本文整理汇总了Scala中scala.util.parsing.combinator.Parsers的典型用法代码示例。如果您正苦于以下问题:Scala Parsers类的具体用法?Scala Parsers怎么用?Scala Parsers使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了Parsers类的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。

示例1: listParser

//设置package包名称以及导入依赖的类
package examples.parsing

import scala.util.parsing.combinator.Parsers
import scala.util.parsing.input.CharArrayReader

object listParser {
  abstract class Tree
  case class Id(s: String)          extends Tree
  case class Num(n: Int)            extends Tree
  case class Lst(elems: List[Tree]) extends Tree

  import Character.{isLetter, isLetterOrDigit, isDigit}
  def mkString(cs: List[Any]) = cs.mkString("")

  class ListParsers extends Parsers {
    type Elem = Char
    
    lazy val ident = rep1(elem("letter", isLetter), elem("letter or digit", isLetterOrDigit)) ^^ {cs => Id(mkString(cs))}
    lazy val number = chainl1(elem("digit", isDigit) ^^ (_ - '0'), success{(accum: Int, d: Int) => accum * 10 + d}) ^^ Num
    lazy val list = '(' ~> repsep(expr, ',') <~ ')' ^^ Lst
    lazy val expr: Parser[Tree] = list | ident | number
  }

  def main(args: Array[String]) {
    println(
      if (args.length == 0) "usage: scala examples.parsing.listParser <list-string>"
      else (new ListParsers).expr(new CharArrayReader(args.mkString(" ").toCharArray()))
    )
  }
} 
开发者ID:chenc10,项目名称:spark-SSR-ICDCS17,代码行数:31,代码来源:ListParser.scala

示例2: repN

//设置package包名称以及导入依赖的类
package se.dimovski.rencode.internal

import scala.util.parsing.combinator.Parsers



trait ParserGenerator extends Parsers {
  override def repN[T](n: Int, p: => Parser[T]): Parser[List[T]] = Parser {
    in0 =>
      val xs = new scala.collection.mutable.ListBuffer[T]
      var in = in0
      var i = n

      if (n == 0) {
        return success(List())
      }
      var res = p(in)
      while (res.successful && i > 0) {
        i -= 1
        xs += res.get
        in = res.next
        res = p(in)
      }

      res match {
        case e: Error => e
        case _ =>
          if (!xs.isEmpty) {
            Success(xs.toList, in)
          }
          else {
            Failure(res.asInstanceOf[NoSuccess].msg, in0)
          }
      }
  }
} 
开发者ID:aegnor,项目名称:rencode-scala,代码行数:37,代码来源:ParserGenerator.scala

示例3: DATE_LITERAL_REGEX

//设置package包名称以及导入依赖的类
package com.github.kczulko.isc.dhcp

import com.github.kczulko.isc.dhcp.parsers.RegexMatchedParser

import scala.util.matching.Regex
import scala.util.parsing.combinator.Parsers

private[dhcp] trait Tokens extends Parsers with RegexMatchedParser {
  def DATE_LITERAL_REGEX: Parser[String] = """\d{4}/\d{2}/\d{2}""".r
  def HOUR_LITERAL_REGEX: Parser[String] = """\d{2}:\d{2}:\d{2}""".r
  def MAC_ADDRESS_REGEX: Parser[String] =
    """([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})""".r
  def IP_ADDRESS_REGEX: Parser[String] = """(?:[0-9]{1,3}\.){3}[0-9]{1,3}""".r
  def WHATEVER_REGEX: Parser[String] =
    regexMatchedParser(new Regex(s"""(.*)?(;)""", "content", "semicolon")) ^^
      (_.group("content"))
} 
开发者ID:kczulko,项目名称:isc-dhcp-leases-parser,代码行数:18,代码来源:Tokens.scala

示例4: CommandParser

//设置package包名称以及导入依赖的类
package sbt.impl

import scala.util.parsing.combinator.Parsers
import scala.util.parsing.input.CharSequenceReader
import scala.util.parsing.input.CharArrayReader.EofCh


private[sbt] object CommandParser extends Parsers
{
	type Elem = Char
	def parse(commandString: String): Either[String, (String, List[String])] =
	{
		command(new CharSequenceReader(commandString.trim, 0)) match
		{
			case Success(id ~ args, next) => Right((id, args))
			case err: NoSuccess =>
			{
				val pos = err.next.pos
				Left("Could not parse command: (" + pos.line + "," + pos.column + "): " + err.msg)
			}
		}
	}
	def command = phrase(identifier ~! (argument*))
	def identifier = unquoted | err("Expected identifier")
	def argument = ( (whitespaceChar+) ~> (unquoted | quoted) )
	
	def unquoted: Parser[String] = ((unquotedChar ~! (unquotedMainChar*)) ^^ { case a ~ tail => (a :: tail).mkString("") })
	def quoted: Parser[String] = quote ~> quotedChars <~ (quote | err("Missing closing quote character"))

	def quotedChars: Parser[String] = (escape | nonescapeChar)*
	def escape: Parser[Char] = backslash ~> (escapeChar | err("Illegal escape"))
	def escapeChar: Parser[Char] = quote | backslash
	def nonescapeChar: Parser[Char] = elem("", ch => !isEscapeChar(ch) && ch != EofCh)
	def unquotedChar: Parser[Char] = elem("", ch => !isEscapeChar(ch) && !Character.isWhitespace(ch) && ch != EofCh)
	def unquotedMainChar: Parser[Char] = unquotedChar | (errorIfEscape ~> failure(""))

	private def errorIfEscape = (not(quote) | err("Unexpected quote character")) ~>
		(not(backslash) | err("Escape sequences can only occur in a quoted argument"))

	private def isEscapeChar(ch: Char) = ch == '\\' || ch == '"'
	
	def quote: Parser[Char] = '"'
	def backslash: Parser[Char] = '\\'
	def whitespaceChar: Parser[Char] = elem("whitespace", ch => Character.isWhitespace(ch))

	private implicit def toString(p: Parser[List[Char]]): Parser[String] = p ^^ {_ mkString "" }
} 
开发者ID:TomasPleml,项目名称:simple-build-tool,代码行数:48,代码来源:CommandParser.scala

示例5: parse

//设置package包名称以及导入依赖的类
package io.github.writeonly.resentiment.teapot.phases.analyzers

import io.github.writeonly.resentiment.teapot.core.Command

import scala.util.parsing.combinator.{JavaTokenParsers, PackratParsers, Parsers}

trait Analyzer extends Parsers {
  def parse(code : String) : ParseResult[Command]
  def apply(code : String) : Command = parse(code) match {
    case Success(r, n) => r
//    case NoSuccess(msg, n) => throw new IllegalArgumentException(msg + "|" + n)
    case f:Failure => throw new IllegalArgumentException(f.toString())
    case e:Error => throw new IllegalArgumentException(e.toString())
  }
}

trait AnalyzerLL extends Analyzer with JavaTokenParsers {}

trait AnalyzerLR extends AnalyzerLL with PackratParsers {} 
开发者ID:writeonly,项目名称:resentiment,代码行数:20,代码来源:Analyzer.scala


注:本文中的scala.util.parsing.combinator.Parsers类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。