Skip to content
Snippets Groups Projects
Commit 7f716736 authored by Katja Goltsova's avatar Katja Goltsova Committed by Viktor Kunčak
Browse files

Add spaces as appropriate when printing a formula

parent e19e47a5
No related branches found
No related tags found
4 merge requests!62Easy tactics,!58Easy tactics,!54Front integration,!53Front integration
This commit is part of merge request !53. Comments created here will be created in the context of that merge request.
...@@ -36,26 +36,28 @@ object Parser { ...@@ -36,26 +36,28 @@ object Parser {
def printTerm(t: Term): String = SequentParser.printTerm(t).get def printTerm(t: Term): String = SequentParser.printTerm(t).get
private[Parser] sealed abstract class FormulaToken private[Parser] sealed abstract class FormulaToken(stringRepr: String) {
case object ForallToken extends FormulaToken override def toString: String = stringRepr
case object ExistsOneToken extends FormulaToken }
case object ExistsToken extends FormulaToken case object ForallToken extends FormulaToken(Forall.id)
case object DotToken extends FormulaToken case object ExistsOneToken extends FormulaToken(ExistsOne.id)
case object AndToken extends FormulaToken case object ExistsToken extends FormulaToken(Exists.id)
case object OrToken extends FormulaToken case object DotToken extends FormulaToken(".")
case object ImpliesToken extends FormulaToken case object AndToken extends FormulaToken(And.id)
case object IffToken extends FormulaToken case object OrToken extends FormulaToken(Or.id)
case object NegationToken extends FormulaToken case object ImpliesToken extends FormulaToken(Implies.id)
case object EqualityToken extends FormulaToken case object IffToken extends FormulaToken(Iff.id)
case object NegationToken extends FormulaToken(Neg.id)
case object EqualityToken extends FormulaToken(equality.id)
// Constant functions and predicates // Constant functions and predicates
case class ConstantToken(id: String) extends FormulaToken case class ConstantToken(id: String) extends FormulaToken(id)
// Variables, schematic functions and predicates // Variables, schematic functions and predicates
case class SchematicToken(id: String) extends FormulaToken case class SchematicToken(id: String) extends FormulaToken("?" + id)
case class ParenthesisToken(isOpen: Boolean) extends FormulaToken case class ParenthesisToken(isOpen: Boolean) extends FormulaToken(if (isOpen) "(" else ")")
case object CommaToken extends FormulaToken case object CommaToken extends FormulaToken(",")
case object SemicolonToken extends FormulaToken case object SemicolonToken extends FormulaToken(";")
case object SequentToken extends FormulaToken case object SequentToken extends FormulaToken("⊢")
case object SpaceToken extends FormulaToken case object SpaceToken extends FormulaToken(" ")
private[Parser] object SequentLexer extends Lexers with CharLexers { private[Parser] object SequentLexer extends Lexers with CharLexers {
type Token = FormulaToken type Token = FormulaToken
...@@ -93,26 +95,24 @@ object Parser { ...@@ -93,26 +95,24 @@ object Parser {
lexer(source).filter(_ != SpaceToken) lexer(source).filter(_ != SpaceToken)
} }
// TODO: add spaces as needed def unapply(tokens: Iterator[Token]): String = {
def unapply(tokens: Iterator[Token]): String = tokens.map { val space = " "
case ForallToken => Forall.id tokens
case ExistsOneToken => ExistsOne.id .foldLeft(Nil: List[String]) {
case ExistsToken => Exists.id // Sequent token is the only separator that can have an empty left side; in this case, omit the space before
case DotToken => "." case (Nil, SequentToken) => SequentToken.toString :: space :: Nil
case AndToken => And.id case (l, t) =>
case OrToken => Or.id t match {
case ImpliesToken => Implies.id // do not require spaces
case IffToken => Iff.id case NegationToken | ConstantToken(_) | SchematicToken(_) | ParenthesisToken(_) | SpaceToken => l :+ t.toString
case NegationToken => Neg.id // space after: quantifiers and separators
case EqualityToken => equality.id case ForallToken | ExistsToken | ExistsOneToken | DotToken | CommaToken | SemicolonToken => l :+ t.toString :+ space
case ConstantToken(id) => id // space before and after: equality, connectors, sequent symbol
case SchematicToken(id) => "?" + id case EqualityToken | AndToken | OrToken | ImpliesToken | IffToken | SequentToken => l :+ space :+ t.toString :+ space
case ParenthesisToken(isOpen) => if (isOpen) "(" else ")" }
case CommaToken => "," }
case SemicolonToken => ";" .mkString
case SequentToken => "⊢" }
case SpaceToken => " "
}.mkString
} }
private[Parser] object SequentParser extends Parsers { private[Parser] object SequentParser extends Parsers {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment