Skip to content

GitLab

  • Menu
    • Projects Groups Snippets
      Help
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • N ndl
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pro
  • ndl
  • Merge requests
  • !3

Merged
Created 6 years ago by Ghost User@ghost

Range-based facts generation

  • Overview 0
  • Commits 2
  • Changes 10
  • Ghost User @ghost added 1 commit 6 years ago

    added 1 commit

    • 4fa0380f - Add range parser logic

    Compare with previous version

  • Ghost User @ghost added 15 commits 6 years ago

    added 15 commits

    • 4fa0380f...65a94cf1 - 13 commits from branch knowledge-base
    • 82e9ab72 - Range-based facts generation
    • 6e2d4387 - Add range parser logic

    Compare with previous version

  • Ghost User @ghost unmarked as a Work In Progress 6 years ago

    unmarked as a Work In Progress

  • Ghost User @ghost merged 6 years ago

    merged

  • Ghost User @ghost mentioned in commit 9fc8f614 6 years ago

    mentioned in commit 9fc8f614

  • You're only seeing other activity in the feed. To add a comment, switch to one of the following options.
Please register or sign in to reply
Compare
  • version 2
    4fa0380f
    6 years ago

  • version 1
    1d356ded
    6 years ago

  • knowledge-base (base)

and
  • latest version
    6e2d4387
    2 commits, 6 years ago

  • version 2
    4fa0380f
    2 commits, 6 years ago

  • version 1
    1d356ded
    1 commit, 6 years ago

10 files
+ 122
- 19

    Preferences

    File browser
    Compare changes
s‎rc‎
main/scala/pl/ed‎u/agh/kis/eis/ndl‎
par‎ser‎
FactPars‎er.scala‎ +17 -0
FunctorPa‎rser.scala‎ +7 -6
NDLPars‎er.scala‎ +4 -7
re‎pl‎
REPL.‎scala‎ +5 -3
Knowledge‎Base.scala‎ +0 -1
NDL.‎scala‎ +17 -2
RangeFa‎ct.scala‎ +14 -0
test/scala/pl/ed‎u/agh/kis/eis/ndl‎
par‎ser‎
FactParser‎Spec.scala‎ +27 -0
NDLParser‎Spec.scala‎ +10 -0
RangeFact‎Spec.scala‎ +21 -0
src/main/scala/pl/edu/agh/kis/eis/ndl/parser/FactParser.scala 0 → 100644
+ 17
- 0
  • View file @ 6e2d4387

  • Edit in single-file editor

  • Edit in Web IDE

package pl.edu.agh.kis.eis.ndl.parser
import pl.edu.agh.kis.eis.ndl.{Fact, FactGenerator, RangeFact}
class FactParser extends FunctorParser {
val range: Parser[Range] = value ~ ".." ~ value ^^ { case start ~ _ ~ end => start to end }
val rangeUnaryFact: Parser[FactGenerator[Domain]] = braced(functorName ~ range ^^
{ case name ~ r => RangeFact(name, r) })
val rangeBinaryFact: Parser[FactGenerator[Domain]] = braced(functorName ~ range ~ range ^^
{ case name ~ r1 ~ r2 => RangeFact(name, r1, Some(r2)) })
val fact: Parser[Fact[Domain]] = functor ^^ { Fact(_) }
val factGen: Parser[FactGenerator[Domain]] = rangeUnaryFact | rangeBinaryFact | fact
}
src/main/scala/pl/edu/agh/kis/eis/ndl/parser/FunctorParser.scala
+ 7
- 6
  • View file @ 6e2d4387

  • Edit in single-file editor

  • Edit in Web IDE


@@ -7,15 +7,16 @@ import scala.util.parsing.combinator.JavaTokenParsers
class FunctorParser extends JavaTokenParsers {
type Domain = Int
def variable: Parser[Variable[Int]] = "[A-Za-z]+".r ^^ Variable[Int]
def const: Parser[Const[Int]] = wholeNumber ^^ { number => Const(number.toInt) }
def param: Parser[VarOrAtom[Int]] = const | variable
def variable: Parser[Variable[Domain]] = "[A-Za-z]+".r ^^ Variable[Domain]
def value: Parser[Domain] = wholeNumber ^^ (_.toInt)
def const: Parser[Const[Domain]] = value.map(Const(_))
def param: Parser[VarOrAtom[Domain]] = const | variable
def functorName: Parser[String] = "[A-Za-z=\\\\<]+".r
def functorArgs: Parser[Functor[Int]] = functorName ~ rep1(param) ^^ {
case name ~ params => Functor[Int](name, params: _*)
def functorArgs: Parser[Functor[Domain]] = functorName ~ rep1(param) ^^ {
case name ~ params => Functor[Domain](name, params: _*)
}
def braced[T](parser: Parser[T]): Parser[T] = "(" ~> parser <~ ")"
def functor: Parser[Functor[Int]] = braced(functorArgs)
def functor: Parser[Functor[Domain]] = braced(functorArgs)
}
src/main/scala/pl/edu/agh/kis/eis/ndl/parser/NDLParser.scala
+ 4
- 7
  • View file @ 6e2d4387

  • Edit in single-file editor

  • Edit in Web IDE


package pl.edu.agh.kis.eis.ndl.parser
import pl.edu.agh.kis.eis.ndl._
import scala.util.parsing.input.CharSequenceReader
class NDLParser extends FunctorParser with ConstraintParser[FunctorParser#Domain] {
def parse(input: String): ParseResult[NDL[Domain]] =
parser(new CharSequenceReader(input))
class NDLParser extends FactParser with ConstraintParser[FunctorParser#Domain] {
def parse(input: String): ParseResult[NDL[Domain]] = parse(parser, input)
def parser: Parser[NDL[Domain]] =
(functor | query).map {
case f: Functor[Domain] => Fact(f)
(factGen | query).map {
case f: FactGenerator[Domain] => f
case q: List[Functor[Domain]] => buildQuery(q)
}
src/main/scala/pl/edu/agh/kis/eis/ndl/repl/REPL.scala
+ 5
- 3
  • View file @ 6e2d4387

  • Edit in single-file editor

  • Edit in Web IDE


@@ -22,16 +22,18 @@ trait REPL extends App with LazyLogging {
def read(): parser.ParseResult[NDL[Domain]] = {
val input: String = readInput()
val parsed = parser.parser(new CharSequenceReader(input))
val parsed = parser.parse(input)
logger.trace("parse result: {}", parsed)
parsed
}
def eval(kb: KnowledgeBase[Domain], in: NDL[Domain]): Evaluation = {
in match {
case fact: Fact[Domain] =>
case fact: FactGenerator[Domain] =>
logger.trace("eval(): expanding kb")
(kb.addFact(fact), Iterator.empty)
// FIXME poor performance (set rebuild for each fact)
val augmentedKb = fact.generate.foldLeft(kb) { (newKb, x) => newKb.addFact(x) }
(augmentedKb, Iterator.empty)
case q: Query[Domain] =>
logger.trace("eval(): query")
(kb, executeQuery(kb)(q))
src/main/scala/pl/edu/agh/kis/eis/ndl/KnowledgeBase.scala
+ 0
- 1
  • View file @ 6e2d4387

  • Edit in single-file editor

  • Edit in Web IDE


package pl.edu.agh.kis.eis.ndl
import pl.edu.agh.kis.eis.ndl
import pl.edu.agh.kis.eis.ndl.constraint.Constraint
class KnowledgeBase[A](val facts: Set[Product])(implicit ordering: Ordering[A]) extends
FactSelector[A] with QueryExecutor[A] {
0 Assignees
None
Assign to
0 Reviewers
None
Request review from
Milestone
No milestone
None
None
Time tracking
No estimate or time spent
Labels
0
None
0
None
    Assign labels
  • Manage project labels

Lock merge request
Unlocked
1
1 participant
Ghost User
Reference: pro/ndl!3
Source branch: ranges

Menu

Projects Groups Snippets
Help