29 Commits
1.0.0 ... 1.0.3

Author SHA1 Message Date
20c9a0c1a5 Merge pull request 'develop' (#27) from develop into master
Reviewed-on: #27
2023-04-17 20:49:03 -04:00
42d1ac9bb7 Merge pull request 'prepare 1.0.3' (#26) from feature/add_readme into develop
Reviewed-on: #26
2023-04-17 20:48:39 -04:00
9869d369c4 Merge branch 'develop' into feature/add_readme 2023-04-17 20:48:32 -04:00
5d8b7af28d prepare 1.0.3 2023-04-17 20:47:59 -04:00
efc00f3473 Merge pull request 'develop' (#25) from develop into master
Reviewed-on: #25
2023-04-17 20:44:00 -04:00
578c350b7b Merge branch 'master' into develop 2023-04-17 20:43:53 -04:00
f85f8a4637 Merge pull request 'add readme' (#24) from feature/add_readme into develop
Reviewed-on: #24
2023-04-17 20:43:23 -04:00
7d57800046 add readme 2023-04-17 20:42:26 -04:00
bdc69ceea7 Merge pull request 'develop' (#23) from develop into master
Reviewed-on: #23
2023-03-05 23:06:26 -03:00
5f9af90e80 Merge branch 'master' into develop 2023-03-05 23:06:20 -03:00
4d7ecf8258 Merge pull request 'feature/fix_recursive_rules' (#22) from feature/fix_recursive_rules into develop
Reviewed-on: #22
2023-03-05 23:06:02 -03:00
04902214b7 prepare 1.0.2 2023-03-05 23:05:18 -03:00
0bfd93150f update facts and rules recursively 2023-03-05 23:04:17 -03:00
96a5f25e02 Merge pull request 'develop' (#21) from develop into master
Reviewed-on: #21
2023-03-05 22:20:21 -03:00
d4c4d3fe75 Merge pull request 'typo' (#20) from typo into develop
Reviewed-on: #20
2023-03-05 22:19:56 -03:00
33808b4906 fix typo 2023-03-05 22:18:52 -03:00
44262df885 Merge pull request 'develop' (#19) from develop into master
Reviewed-on: #19
2023-02-28 22:17:52 -03:00
5db2343b23 Merge branch 'master' into develop 2023-02-28 22:17:45 -03:00
a07b94a228 Merge pull request 'feature/finishing_touches' (#18) from feature/finishing_touches into develop
Reviewed-on: #18
2023-02-28 22:17:19 -03:00
7e3cd0af75 prepare 1.0.1 2023-02-28 22:15:55 -03:00
97a91a0d6d add 2 examples 2023-02-28 22:15:01 -03:00
a91bc9b579 enable example files to be commited 2023-02-28 22:14:51 -03:00
f2108492b8 make it clearer what is being returned 2023-02-28 22:11:48 -03:00
6a922e7464 Merge pull request 'restructure the includes to work in external programs' (#17) from develop into master
Reviewed-on: #17
2023-02-26 02:04:58 -03:00
69ce8faad7 Merge branch 'master' into develop 2023-02-26 02:04:52 -03:00
6ba11f1cc9 restructure the includes to work in external programs 2023-02-26 02:04:07 -03:00
cf9b5a02e1 Merge pull request 'build a static obelisk library for easier linking with other software' (#16) from develop into master
Reviewed-on: #16
2023-02-25 21:29:52 -03:00
60b920bc86 Merge branch 'master' into develop 2023-02-25 21:29:23 -03:00
402862b54a build a static obelisk library for easier linking with other software 2023-02-25 21:27:32 -03:00
20 changed files with 258246 additions and 13 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@
builddir
*.kb
*.obk
!examples/*.obk

41
README.md Normal file
View File

@@ -0,0 +1,41 @@
# Obelisk
The Obelisk project is a declarative language designed to help with the implementation of Artificial Intelligence using an easy to use logical programming language.
## Build requirements
- Meson
- Ninja
- LLVM 14
- sqlite 3
- C++ 17
- C 17
## Build
```
meson builddir
cd buildir
ninja
```
This process will generate the binary "obelisk", a shared library "libobelisk.so", and a static library "libobelisk.a".
The binary is used to compile and create obelisk knowledge bases and the the libraries can be linked against to consult the Obelisk knowledge base from any software that can link with the libraries.
## Install
```
ninja install
```
This will install the Obelisk cli and the Obelisk library globally. You can also copy the resulting shared and/or static library to a project to link against and use an Obelisk knowledge base.
## License
Obelisk is licensed under the [The 3-Clause BSD License](LICENSE).
## Authors
- Christopher Cromer
- Martín Araneda

2
examples/multi-fact.obk Normal file
View File

@@ -0,0 +1,2 @@
# this is a comment
fact("chris cromer" and "martin" and "Isabella" can "program" and "speak english");

19
examples/obelisk.obk Normal file
View File

@@ -0,0 +1,19 @@
// an incomplete rule, this one stays false
rule("chris" is "happy" if "chris" plays "playstation");
// a rule that gets inserted as true right away
fact("this" is "madness");
rule("this" is "sparta" if "this" is "madness");
// a rule that is inserted as false then updated at a later stage
rule("bruce" is "batman" if "the waynes" are "dead");
fact("the waynes" are "dead");
// an action that will be false because the fact doesn't exist, should return ignore
action(if "tom" is "dangerous" then "avoid" else "ignore");
// an action that will be true, should return die
action(if "this" is "sparta" then "die" else "live");
fact("what" is "love");
rule("baby" dont "hurt me" if "what" is "love");

View File

@@ -1,7 +1,7 @@
project('obelisk',
'c',
'cpp',
version : '1.0.0',
version : '1.0.3',
license : 'BSD-3-Clause',
default_options : [
'warning_level=3',
@@ -30,4 +30,5 @@ if docs_enabled
endif
endif
subdir('sqlite')
subdir('src')

20
sqlite/meson.build Normal file
View File

@@ -0,0 +1,20 @@
sqlite_sources = files(
'sqlite3.c'
)
sqlite_include_directories = include_directories(['.'])
sqlite_args = [
'-DSQLITE_OMIT_DESERIALIZE',
'-DSQLITE_OMIT_DEPRECATED',
'-DSQLITE_OMIT_JSON',
'-DSQLITE_OMIT_LOAD_EXTENSION',
'-DSQLITE_OMIT_PROGRESS_CALLBACK',
'-DSQLITE_DEFAULT_FOREIGN_KEYS=1',
'-DSQLITE_DEFAULT_AUTOVACUUM=1',
'-DSQLITE_DISABLE_LFS',
'-DSQLITE_OMIT_TEMPDB',
'-DSQLITE_OMIT_GET_TABLE',
'-DSQLITE_OMIT_COMPLETE',
'-DSQLITE_OMIT_COMPILEOPTION_DIAGS'
]

245165
sqlite/sqlite3.c Normal file

File diff suppressed because it is too large Load Diff

12970
sqlite/sqlite3.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -56,10 +56,10 @@ int obelisk::Lexer::getToken()
if (getIdentifier() == "extern")
{
return kTokenExtern;
return Token::kTokenExtern;
}
return kTokenIdentifier;
return Token::kTokenIdentifier;
}
if (isdigit(lastChar))

View File

@@ -80,23 +80,27 @@ namespace obelisk
* @brief A fact which is a relationship between 2 entities.
*
*/
kTokenFact = -2,
kTokenFact = -2,
/**
* @brief A rule which is a relationship between a new fact a
* existing fact.
*
*/
kTokenRule = -3,
kTokenRule = -3,
/**
* @brief An action to take if a fact is true.
*
*/
kTokenAction = -4,
/**
* @brief A definition of a new function.
*
*/
kTokenDef = -5,
kTokenDef = -5,
/**
* @brief An external function that will be linked to.
*
@@ -108,16 +112,18 @@ namespace obelisk
*
*/
kTokenIdentifier = -7,
/**
* @brief A double floating point value.
*
*/
kTokenNumber = -8,
kTokenNumber = -8,
/**
* @brief A string.
*
*/
kTokenString = -9
kTokenString = -9
};
/**

View File

@@ -250,6 +250,7 @@ void obelisk::KnowledgeBase::checkRule(obelisk::Fact& fact)
auto updateFact = rule.getFact();
updateFact.setIsTrue(1.0);
updateFact.updateIsTrue(dbConnection_);
checkRule(updateFact);
}
}
}

View File

@@ -16,14 +16,21 @@ obelisk_lib_sources = files(
)
obelisk_lib_sources += obelisk_model_sources
sqlite3 = dependency('sqlite3')
obelisk_lib_sources += sqlite_sources
incdirs = include_directories(['.', 'include'])
lib = library('obelisk',
lib = static_library('obelisk',
obelisk_lib_sources,
c_args : sqlite_args,
include_directories: [incdirs, sqlite_include_directories],
install : true
)
shared_library('obelisk',
obelisk_lib_sources,
c_args : sqlite_args,
include_directories: incdirs,
dependencies : [sqlite3],
version : meson.project_version(),
soversion : project_version_lib,
install : true

View File

@@ -15,7 +15,7 @@ namespace obelisk
*
*/
std::string usageMessage = R"(Usage: obelisk [OPTION]... [FILE]...
Compile the obelisk source FILE(s) into knoweldge base and library.
Compile the obelisk source FILE(s) into knowledge base and library.
Options:
-h, --help shows this help/usage message