From 0473d2ef56c230f52d573df67027dcd7cf654c9d Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Fri, 9 Dec 2016 06:17:13 +0100 Subject: [PATCH] add regular expression features to C# API Signed-off-by: Nikolaj Bjorner --- src/api/dotnet/Context.cs | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/api/dotnet/Context.cs b/src/api/dotnet/Context.cs index 421c81fae..494b29a00 100644 --- a/src/api/dotnet/Context.cs +++ b/src/api/dotnet/Context.cs @@ -2564,6 +2564,16 @@ namespace Microsoft.Z3 return new ReExpr(this, Native.Z3_mk_re_star(nCtx, re.NativeObject)); } + /// + /// Take the bounded Kleene star of a regular expression. + /// + public ReExpr MkLoop(ReExpr re, uint lo, uint hi = 0) + { + Contract.Requires(re != null); + Contract.Ensures(Contract.Result() != null); + return new ReExpr(this, Native.Z3_mk_re_loop(nCtx, re.NativeObject, lo, hi)); + } + /// /// Take the Kleene plus of a regular expression. /// @@ -2610,6 +2620,39 @@ namespace Microsoft.Z3 return new ReExpr(this, Native.Z3_mk_re_union(nCtx, (uint)t.Length, AST.ArrayToNative(t))); } + /// + /// Create the intersection of regular languages. + /// + public ReExpr MkIntersect(params ReExpr[] t) + { + Contract.Requires(t != null); + Contract.Requires(Contract.ForAll(t, a => a != null)); + Contract.Ensures(Contract.Result() != null); + + CheckContextMatch(t); + return new ReExpr(this, Native.Z3_mk_re_intersect(nCtx, (uint)t.Length, AST.ArrayToNative(t))); + } + + /// + /// Create the empty regular expression. + /// + public ReExpr MkEmptyRe(Sort s) + { + Contract.Requires(s != null); + Contract.Ensures(Contract.Result() != null); + return new ReExpr(this, Native.Z3_mk_re_empty(nCtx, s.NativeObject)); + } + + /// + /// Create the full regular expression. + /// + public ReExpr MkFullRe(Sort s) + { + Contract.Requires(s != null); + Contract.Ensures(Contract.Result() != null); + return new ReExpr(this, Native.Z3_mk_re_full(nCtx, s.NativeObject)); + } + /// /// Create a range expression.