Scala Programming Language
  1. Scala Programming Language
  2. SI-5514

Scala parser combinators never use atEnd and sometimes never terminate

    Details

      Description

      Please see code below. It does not terminate even though the expected result is to stop applying rep when reader is depleted.

      import scala.io.Source
      import scala.util.parsing.combinator.Parsers
      import scala.util.parsing.input.Reader
      import scala.util.parsing.input.Position
      
      object DemoApp extends App {
      	val parsers = new DemoParsers
      	val reader = new DemoReader(10)
      	val result = parsers.startsWith("s").*(reader)
      	Console println result
      }
      
      class DemoReader(n: Int) extends Reader[String] {
      	def atEnd = n == 0
      	def first = "s" + n
      	def rest = new DemoReader(n - 1)
      	def pos = new Position { def line = 0; def column = 0; def lineContents = first }
      }
      
      class DemoParsers extends Parsers {
      	type Elem = String
      	def startsWith(prefix: String) = acceptIf(_ startsWith prefix)("Error: " + _)
      }
      

        Activity

        There are no comments yet on this issue.

          People

          • Assignee:
            Aleksandar Prokopec
            Reporter:
            Tymur Porkuian
          • Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development