# HG changeset patch # User Christian Urban # Date 1489260818 0 # Node ID f476c98cad28eefc26f4d0cc2f8430353efd2623 # Parent 18d19d039ac91815abcc2363ea461116f84d61d3 updated diff -r 18d19d039ac9 -r f476c98cad28 progs/scala/re-ext.scala --- a/progs/scala/re-ext.scala Sat Mar 11 12:50:01 2017 +0000 +++ b/progs/scala/re-ext.scala Sat Mar 11 19:33:38 2017 +0000 @@ -2,6 +2,7 @@ import scala.language.reflectiveCalls import scala.annotation.tailrec import scala.io.Source +import scala.util._ abstract class Rexp case object ZERO extends Rexp @@ -157,7 +158,8 @@ case c::cs => inj(r, c, lex(der(c, r), cs)) } -import scala.util._ + + def lexing(r: Rexp, s: String) : Try[Val] = Try(lex(r, s.toList)) @@ -218,7 +220,7 @@ } } -def lexing_simp(r: Rexp, s: String) : Val = lex_simp(r, s.toList) +def lexing_simp(r: Rexp, s: String) : Try[Val] = Try(lex_simp(r, s.toList)) // Some Tests @@ -249,10 +251,11 @@ val ALL = CHARS((c) => true) val reg = ALL.% ~ "a" ~ NTIMES(ALL, 3) ~ "bc" -println(lexing(reg, "axaybzbc")) // true -println(lexing(reg, "aaaaxaybzbc")) // true -println(nullable(ders("axaybzbd".toList, reg))) // false -println(lexing(reg, "axaybzbd")) // false +println(lexing(reg, "axaybzbc")) // true +println(lexing(reg, "aaaaxaybzbc")) // true + +println(nullable(ders("axaybzbd".toList, reg))) // false +println(lexing(reg, "axaybzbd")) // false @@ -302,12 +305,12 @@ println("prog0 test") val prog0 = """read n""" -println(env(lexing_simp(WHILE_REGS, prog0))) +println(env(lexing_simp(WHILE_REGS, prog0).get)) println("prog1 test") val prog1 = """read n; write (n)""" -println(env(lexing_simp(WHILE_REGS, prog1))) +println(env(lexing_simp(WHILE_REGS, prog1).get)) // Bigger Test @@ -327,7 +330,15 @@ }""" println("prog2 test - tokens") -println(env(lexing_simp(WHILE_REGS, prog2))) +println(env(lexing_simp(WHILE_REGS, prog2).get)) + + +// replicate prog2 + +println("prog2 replicated test") +for (i <- 1 to 88 by 5) { + println(i + ": " + "%.5f".format(time_needed(2, lexing_simp(WHILE_REGS, prog2 * i)))) +} val prog3 = """ @@ -346,13 +357,9 @@ """ println("prog3 test - tokens") -println(env(lexing_simp(WHILE_REGS, prog3))) - -println("prog2 replicated test") +println(env(lexing_simp(WHILE_REGS, prog3).get)) -for (i <- 1 to 88) { - println(i + ": " + "%.5f".format(time_needed(2, lexing_simp(WHILE_REGS, prog2 * i)))) -} + // Sulzmann's tests @@ -377,7 +384,7 @@ val reWord = CHARS("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" contains _) val reWordStar = STAR(reWord) -val reWordPlus = reWord ~ reWordStar +val reWordPlus = PLUS(reWord) val optionSet1 = "-" | "+" | "." val optionSet2 = "-" | "." val atTheRate = "@" diff -r 18d19d039ac9 -r f476c98cad28 thys/LexerExt.thy --- a/thys/LexerExt.thy Sat Mar 11 12:50:01 2017 +0000 +++ b/thys/LexerExt.thy Sat Mar 11 19:33:38 2017 +0000 @@ -1159,12 +1159,12 @@ next case (Posix_NMTIMES1 s1 r v s2 n m vs v2) have "(s1 @ s2) \ NMTIMES r (Suc n) (Suc m) \ v2" - "s1 \ r \ v" "s2 \ (NMTIMES r n m) \ Stars vs" + "s1 \ r \ v" "s2 \ (NMTIMES r n m) \ Stars vs" "flat v = [] \ flat (Stars vs) = []" "\ (\s\<^sub>3 s\<^sub>4. s\<^sub>3 \ [] \ s\<^sub>3 @ s\<^sub>4 = s2 \ s1 @ s\<^sub>3 \ L r \ s\<^sub>4 \ L (NMTIMES r n m))" by fact+ then obtain v' vs' where "v2 = Stars (v' # vs')" "s1 \ r \ v'" "s2 \ (NMTIMES r n m) \ (Stars vs')" apply(cases) apply (auto simp add: append_eq_append_conv2) using Posix1(1) apply fastforce - by (m etis Posix1(1) Posix_NMTIMES1.hyps(5) append_Nil append_Nil2) + by (metis Posix1(1) Posix_NMTIMES1.hyps(6) self_append_conv self_append_conv2) moreover have IHs: "\v2. s1 \ r \ v2 \ v = v2" "\v2. s2 \ NMTIMES r n m \ v2 \ Stars vs = v2" by fact+ @@ -1569,6 +1569,8 @@ apply(blast) apply(simp) apply(simp add: der_correctness Der_def) + using Posix1a Prf_injval_flat list.distinct(1) apply auto[1] + apply(simp add: der_correctness Der_def) done next case (PLUS r)