Commit Graph

93 Commits

Author SHA1 Message Date
5ea0a96ec4
Test disjunction parser 2020-04-09 16:07:30 +02:00
17d8dbd8ba
Test conjunction parser 2020-04-09 16:07:30 +02:00
834e59207f
Add note 2020-04-09 16:07:30 +02:00
257e02f285
Minor refactoring 2020-04-09 16:07:30 +02:00
2e3707e0af
Check that names don’t start with special characters 2020-04-09 16:07:30 +02:00
d0263dd1c4
Add missing word boundary character 2020-04-09 16:07:30 +02:00
a7dd4d2fe9
Disallow reserved keywords as names 2020-04-09 16:07:29 +02:00
c127bc5eea
Address clippy warning 2020-04-09 16:07:29 +02:00
cb616eba87
Refactor term parser tests 2020-04-09 16:07:29 +02:00
95677bae34
Fix negation parser 2020-04-09 16:07:29 +02:00
3414e8075c
Address warnings 2020-04-09 16:07:29 +02:00
675063e1b8
Move string parser to separate module 2020-04-09 16:07:29 +02:00
7d78a504b1
Move special integer parser to separate module 2020-04-09 16:07:29 +02:00
6f86cd40d7
Move integer parser to separate module 2020-04-09 16:07:29 +02:00
29ea4578e4
Move boolean parser to separate module 2020-04-09 16:07:29 +02:00
a1bbae9201
Finish implementing formula parsing 2020-04-09 16:07:29 +02:00
1c00e5be16
Continue parsing formulas 2020-04-09 16:07:29 +02:00
1b89d8900e
Start parsing formulas 2020-04-09 16:07:29 +02:00
af1ec8a606
Fix term parsing and finish tests 2020-04-09 16:07:29 +02:00
2907d10148
Make parse feature the default 2020-04-09 16:07:28 +02:00
19e70a90c5
Test associativity of multiplication 2020-04-09 16:07:28 +02:00
385c878597
Add term parsing test 2020-04-09 16:07:28 +02:00
5b98e8a29c
Finish implementing term parsing 2020-04-09 16:07:28 +02:00
3530364ea8
Implement variable parsing 2020-04-09 16:07:28 +02:00
deae102405
Require word boundaries around names 2020-04-09 16:07:28 +02:00
0fc8506164
Implement booleans 2020-04-09 16:07:28 +02:00
e6a5c20d42
Add pipe character to allowed word boundaries 2020-04-09 16:07:28 +02:00
d5cd179a2d
Implement strings 2020-04-09 16:07:28 +02:00
5ec9331b4c
Implement word boundaries 2020-04-09 16:07:28 +02:00
896af02120
Start parsing terms 2020-04-09 16:07:28 +02:00
0c057211ed
Implement name parsing 2020-04-09 16:07:28 +02:00
91918cf645
Start reimplementing parser 2020-04-09 16:07:25 +02:00
fd6ba4a005
Test crate with GitHub Actions
This adds a GitHub Actions workflow to test this crate with the Rust
stable, beta, and nightly toolchains.
2020-04-09 15:34:49 +02:00
153f77621e
Fix precedence of absolute value operation
As the absolute value operation has its own type of parentheses, it
never needs to take precedence over other terms in order to be displayed
correctly. To avoid extraneous parentheses around absolute value
operations, set its precedence level to 0.
2020-03-30 06:42:54 +02:00
551c35ed75
Fix formatting of binary operations
The precedence rules of binary operations are a bit trickier than
expected. The fact that a parent and a child term have the same
precedence level doesn’t automatically mean that parentheses can be
omitted. This is the case, for example, with

    a - (b + c)

While addition and subtraction have the same precedence level, the
parenthesis cannot be omitted. In general, this happens on the right-
hand side of the subtraction, division, and modulo operators if the
right-hand side has the same precedence level.

This patch fixes the output of binary operations accordingly.
2020-03-30 06:37:21 +02:00
549f127729
Derive simple enums from basic traits
This adds derive statements from Copy, Clone, PartialEq, and Eq to the
operator enums as well as SpecialInteger.
2020-03-30 06:37:21 +02:00
a304ec9a75
Fix output of Booleans in formulas
Booleans are supposed to be formatted without a leading hash sign in
both terms and formulas. By mistake, the formula formatter added leading
hash signs though.
2020-03-30 06:37:21 +02:00
a82b4080c8
Fix function formatting
By mistake, a function’s name was printed two consecutive times if the
function had more than one argument.
2020-03-30 06:37:21 +02:00
90f7be2f33
Minor refactoring for clarity 2020-03-30 06:37:21 +02:00
a127a053b2
Support formatting special integers separately
This adds Debug and Display trait implementations for the SpecialInteger
enum to make it possible to format its values without having to wrap it
in a Term variant.
2020-03-30 06:37:21 +02:00
14abd73110
Remove unneeded lifetime specifiers 2020-03-30 05:19:01 +02:00
3a5788bd24
Remove redundant release badge
Provided that the latest version of this crate is always published on
crates.io and tagged as a release on GitHub.com, the crates.io and the
GitHub.com release badges will always show the same version.
Consequently, remove the GitHub.com release badge to avoid redundancy.
2020-02-25 15:27:24 +01:00
a446aed011
Initial commit
This provides an abstract syntax tree for first-order logic with integer
arithmetics. Initially, the following types of formulas are supported:

- Booleans values (true and false)
- predicates
- negated formulas
- comparisons of terms (<, ≤, >, ≥, =, ≠)
- implications and biconditionals
- conjunctions and disjunctions of formulas
- existentially and universally quantified formulas

In addition, these types of terms are provided:

- Boolean values (true and false)
- integers
- strings
- special integers (infimum and supremum)
- symbolic functions
- variables
- binary operations (addition, subtraction, multiplication, division,
  modulo, exponentiation)
- unary operations (absolute value, numeric negation)
2020-02-05 03:23:11 +01:00