This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-474
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-474 by this push:
new 210512c WIP
210512c is described below
commit 210512c5b5d489612168b94e9effdf59b8b6fd5e
Author: Aaron Radzinski <[email protected]>
AuthorDate: Sat Jan 22 18:22:03 2022 -0800
WIP
---
.../intent/compiler/NCIDLCompilerGlobal.scala | 83 ++++++++++++++++++++++
.../internal/intent/compiler/NCIDLFragment.scala | 30 ++++++++
.../internal/intent/compiler/antlr4/NCIDL.g4 | 3 +-
3 files changed, 115 insertions(+), 1 deletion(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompilerGlobal.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompilerGlobal.scala
new file mode 100644
index 0000000..2191172
--- /dev/null
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompilerGlobal.scala
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.internal.intent.compiler
+
+import scala.collection.concurrent.TrieMap
+import scala.collection.mutable
+
+/**
+ * Global IDL compiler state.
+ */
+object NCIDLCompilerGlobal:
+ private final val fragCache = TrieMap.empty[String /* Model ID. */ ,
mutable.Map[String, NCIDLFragment]]
+ private final val importCache = mutable.HashSet.empty[String]
+
+ /**
+ *
+ */
+ def clearAllCaches(): Unit =
+ fragCache.clear()
+ clearImportCache()
+
+ /**
+ *
+ */
+ private def clearImportCache(): Unit = importCache.synchronized {
importCache.clear() }
+
+ /**
+ *
+ * @param mdlId
+ */
+ def clearCache(mdlId: String): Unit = fragCache += mdlId ->
mutable.HashMap.empty[String, NCIDLFragment]
+
+ /**
+ *
+ * @param imp
+ */
+ def addImport(imp: String): Unit = importCache.synchronized { importCache
+= imp }
+
+ /**
+ *
+ * @param imp
+ * @return
+ */
+ def hasImport(imp: String): Boolean = importCache.synchronized {
importCache.contains(imp) }
+
+ /**
+ *
+ * @param mdlId
+ * @param frag
+ */
+ def addFragment(mdlId: String, frag: NCIDLFragment): Unit =
+ fragCache.getOrElse(mdlId, {
+ val m = mutable.HashMap.empty[String, NCIDLFragment]
+
+ fragCache += mdlId -> m
+
+ m
+ }) += (frag.id -> frag)
+
+ /**
+ *
+ * @param mdlId
+ * @param fragId
+ * @return
+ */
+ def getFragment(mdlId: String, fragId: String): Option[NCIDLFragment] =
+ fragCache.get(mdlId).flatMap(_.get(fragId))
+
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLFragment.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLFragment.scala
new file mode 100644
index 0000000..83b1b87
--- /dev/null
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLFragment.scala
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.internal.intent.compiler
+
+import org.apache.nlpcraft.internal.intent.*
+
+/**
+ * IDL fragment.
+ *
+ * @param id ID of this fragment (must be unique within a model).
+ * @param terms List of terms this fragment defines.
+ */
+case class NCIDLFragment(id: String, terms: List[NCIDLTerm]):
+ require(id != null)
+ require(terms.nonEmpty)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/antlr4/NCIDL.g4
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/antlr4/NCIDL.g4
index d47699c..090a338 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/antlr4/NCIDL.g4
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/antlr4/NCIDL.g4
@@ -146,10 +146,11 @@ FUN_NAME
| 'if'
| 'ent_id'
| 'ent_index'
+ | 'ent_text'
| 'ent_groups'
| 'ent_count'
| 'req_id'
- | 'req_normtext'
+ | 'req_text'
| 'req_tstamp'
| 'user_id'
| 'trim'