You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2020/11/14 14:27:22 UTC

[lucene-solr] branch master updated: LUCENE-9605: update snowball to d8cf01ddf37a, adds Yiddish (#2077)

This is an automated email from the ASF dual-hosted git repository.

rmuir pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 52f581e  LUCENE-9605: update snowball to d8cf01ddf37a, adds Yiddish (#2077)
52f581e is described below

commit 52f581e351aa143dab973fc7bc191f90d7caec51
Author: Robert Muir <rm...@apache.org>
AuthorDate: Sat Nov 14 09:27:08 2020 -0500

    LUCENE-9605: update snowball to d8cf01ddf37a, adds Yiddish (#2077)
---
 gradle/generation/snowball.gradle                  |    6 +-
 gradle/generation/snowball.patch                   |   10 +-
 lucene/CHANGES.txt                                 |    2 +
 .../org/tartarus/snowball/ext/SerbianStemmer.java  |  235 ++--
 .../org/tartarus/snowball/ext/YiddishStemmer.java  | 1381 ++++++++++++++++++++
 .../apache/lucene/analysis/snowball/languages.txt  |    1 +
 6 files changed, 1486 insertions(+), 149 deletions(-)

diff --git a/gradle/generation/snowball.gradle b/gradle/generation/snowball.gradle
index b7b37c4..db81a56 100644
--- a/gradle/generation/snowball.gradle
+++ b/gradle/generation/snowball.gradle
@@ -31,11 +31,11 @@ configure(rootProject) {
 configure(project(":lucene:analysis:common")) {
   ext {
     // git commit hash of source code https://github.com/snowballstem/snowball/
-    snowballStemmerCommit = "53739a805cfa6c77ff8496dc711dc1c106d987c1"
+    snowballStemmerCommit = "d8cf01ddf37a9c74a78ada44531c08f7952f2a39"
     // git commit hash of stopwords https://github.com/snowballstem/snowball-website
-    snowballWebsiteCommit = "5a8cf2451d108217585d8e32d744f8b8fd20c711"
+    snowballWebsiteCommit = "ee7cee9bc52f22802f21e94f42d887b0dfa7d2a8"
     // git commit hash of test data https://github.com/snowballstem/snowball-data
-    snowballDataCommit    = "9145f8732ec952c8a3d1066be251da198a8bc792"
+    snowballDataCommit    = "35461050d8f81e8aeac26e38f8a8dbf1afb82721"
 
     snowballWorkDir    = file("${buildDir}/snowball")
 
diff --git a/gradle/generation/snowball.patch b/gradle/generation/snowball.patch
index dc62267..a369acb 100644
--- a/gradle/generation/snowball.patch
+++ b/gradle/generation/snowball.patch
@@ -570,7 +570,7 @@ index 0000000..0cc2b60
 +	)
 +)
 diff --git a/compiler/generator_java.c b/compiler/generator_java.c
-index 3a18db7..5909f87 100644
+index 2958452..966adb4 100644
 --- a/compiler/generator_java.c
 +++ b/compiler/generator_java.c
 @@ -272,7 +272,7 @@ static void generate_AE(struct generator * g, struct node * p) {
@@ -582,7 +582,7 @@ index 3a18db7..5909f87 100644
              break;
      }
  }
-@@ -1138,6 +1138,7 @@ static void generate_class_begin(struct generator * g) {
+@@ -1140,6 +1140,7 @@ static void generate_class_begin(struct generator * g) {
      w(g, " {~+~N"
           "~N"
           "~Mprivate static final long serialVersionUID = 1L;~N"
@@ -590,7 +590,7 @@ index 3a18db7..5909f87 100644
           "~N");
  }
  
-@@ -1184,7 +1185,7 @@ static void generate_among_table(struct generator * g, struct among * x) {
+@@ -1186,7 +1187,7 @@ static void generate_among_table(struct generator * g, struct among * x) {
              if (v->function != 0) {
                  w(g, ", \"");
                  write_varname(g, v->function);
@@ -1013,7 +1013,7 @@ index 73a81a9..f7772d3 100644
      public abstract boolean stem();
  
 diff --git a/libstemmer/modules.txt b/libstemmer/modules.txt
-index cb39621..9fe141e 100644
+index b8ec17a..d2c8e61 100644
 --- a/libstemmer/modules.txt
 +++ b/libstemmer/modules.txt
 @@ -10,11 +10,13 @@
@@ -1030,7 +1030,7 @@ index cb39621..9fe141e 100644
  finnish         UTF_8,ISO_8859_1        finnish,fi,fin
  french          UTF_8,ISO_8859_1        french,fr,fre,fra
  german          UTF_8,ISO_8859_1        german,de,ger,deu
-@@ -50,12 +52,12 @@ porter          UTF_8,ISO_8859_1        porter			english
+@@ -51,12 +53,12 @@ porter          UTF_8,ISO_8859_1        porter			english
  # algorithms are:
  #
  # german2          - This is a slight modification of the german stemmer.
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 46d9fd4..26f3585 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -161,6 +161,8 @@ Improvements
 * LUCENE-9450: Use BinaryDocValues for the taxonomy index instead of StoredFields.
   Add backwards compatibility tests for the taxonomy index. (Gautam Worah, Michael McCandless)
 
+* LUCENE-9605: Update snowball to d8cf01ddf37a, adds Yiddish stemmer. (Robert Muir)
+
 Bug fixes
 
 * LUCENE-8663: NRTCachingDirectory.slowFileExists may open a file while 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/SerbianStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/SerbianStemmer.java
index 2902b91..69daf14 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/SerbianStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/SerbianStemmer.java
@@ -2257,9 +2257,8 @@ private static final char g_ca[] = {119, 95, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 
 private static final char g_rg[] = {1 };
 
-private int I_p3;
-private int I_p2;
 private int I_p1;
+private boolean B_no_diacritics;
 
 
 private boolean r_cyr_to_lat() {
@@ -2516,7 +2515,7 @@ private boolean r_prelude() {
 }
 
 private boolean r_mark_regions() {
-  I_p3 = 0;
+  B_no_diacritics = true;
   int v_1 = cursor;
   lab0: {
     golab1: while(true)
@@ -2534,11 +2533,10 @@ private boolean r_mark_regions() {
       }
       cursor++;
     }
-    I_p3 = cursor;
+    B_no_diacritics = false;
   }
   cursor = v_1;
   I_p1 = limit;
-  I_p2 = 0;
   int v_3 = cursor;
   lab3: {
     golab4: while(true)
@@ -2557,59 +2555,55 @@ private boolean r_mark_regions() {
       cursor++;
     }
     I_p1 = cursor;
-  }
-  cursor = v_3;
-  int v_5 = cursor;
-  lab6: {
-    golab7: while(true)
+    if (!(I_p1 < 2))
     {
-      lab8: {
-        if (!(eq_s("r")))
+      break lab3;
+    }
+    golab6: while(true)
+    {
+      lab7: {
+        if (!(out_grouping(g_v, 97, 117)))
         {
-          break lab8;
+          break lab7;
         }
-        break golab7;
+        break golab6;
       }
       if (cursor >= limit)
       {
-        break lab6;
+        break lab3;
       }
       cursor++;
     }
-    I_p2 = cursor;
-    if (!((I_p1 - I_p2) > 1))
-    {
-      break lab6;
-    }
-    I_p1 = I_p2;
-  }
-  cursor = v_5;
-  if (!(I_p1 < 2))
-  {
-    return false;
+    I_p1 = cursor;
   }
-  lab9: {
-    int v_7 = cursor;
-    lab10: {
-      if (!(I_p1 == I_p2))
-      {
-        break lab10;
+  cursor = v_3;
+  int v_6 = cursor;
+  lab8: {
+    golab9: while(true)
+    {
+      lab10: {
+        if (!(eq_s("r")))
+        {
+          break lab10;
+        }
+        break golab9;
       }
-      golab11: while(true)
+      if (cursor >= limit)
       {
-        lab12: {
-          if (!(eq_s("r")))
-          {
-            break lab12;
-          }
-          break golab11;
-        }
-        if (cursor >= limit)
+        break lab8;
+      }
+      cursor++;
+    }
+    lab11: {
+      int v_8 = cursor;
+      lab12: {
+        if (!(cursor >= 2))
         {
-          break lab10;
+          break lab12;
         }
-        cursor++;
+        break lab11;
       }
+      cursor = v_8;
       golab13: while(true)
       {
         lab14: {
@@ -2621,49 +2615,18 @@ private boolean r_mark_regions() {
         }
         if (cursor >= limit)
         {
-          break lab10;
+          break lab8;
         }
         cursor++;
       }
-      break lab9;
     }
-    cursor = v_7;
-    if (!(I_p1 != I_p2))
+    if (!((I_p1 - cursor) > 1))
     {
-      return false;
-    }
-    golab15: while(true)
-    {
-      lab16: {
-        if (!(in_grouping(g_v, 97, 117)))
-        {
-          break lab16;
-        }
-        break golab15;
-      }
-      if (cursor >= limit)
-      {
-        return false;
-      }
-      cursor++;
-    }
-    golab17: while(true)
-    {
-      lab18: {
-        if (!(out_grouping(g_v, 97, 117)))
-        {
-          break lab18;
-        }
-        break golab17;
-      }
-      if (cursor >= limit)
-      {
-        return false;
-      }
-      cursor++;
+      break lab8;
     }
+    I_p1 = cursor;
   }
-  I_p1 = cursor;
+  cursor = v_6;
   return true;
 }
 
@@ -2675,14 +2638,6 @@ private boolean r_R1() {
   return true;
 }
 
-private boolean r_R2() {
-  if (!(I_p3 == 0))
-  {
-    return false;
-  }
-  return true;
-}
-
 private boolean r_Step_1() {
   int among_var;
   ket = cursor;
@@ -2712,7 +2667,7 @@ private boolean r_Step_1() {
       slice_from("\u010Dajni");
       break;
     case 7:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2788,7 +2743,7 @@ private boolean r_Step_1() {
       slice_from("du\u0161ni");
       break;
     case 31:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2855,7 +2810,7 @@ private boolean r_Step_1() {
       slice_from("\u0161avi");
       break;
     case 52:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2868,7 +2823,7 @@ private boolean r_Step_1() {
       slice_from("a\u010Dka");
       break;
     case 55:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2878,7 +2833,7 @@ private boolean r_Step_1() {
       slice_from("u\u0161ka");
       break;
     case 57:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2906,7 +2861,7 @@ private boolean r_Step_1() {
       slice_from("ti\u010Dni");
       break;
     case 65:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2931,7 +2886,7 @@ private boolean r_Step_1() {
       slice_from("osti");
       break;
     case 72:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -2992,7 +2947,7 @@ private boolean r_Step_1() {
       slice_from("a\u0161ni");
       break;
     case 91:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -3377,308 +3332,308 @@ private boolean r_Step_2() {
       slice_from("at");
       break;
     case 121:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("luc");
       break;
     case 122:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("snj");
       break;
     case 123:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("os");
       break;
     case 124:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ac");
       break;
     case 125:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ec");
       break;
     case 126:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("uc");
       break;
     case 127:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("rosi");
       break;
     case 128:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("aca");
       break;
     case 129:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("jas");
       break;
     case 130:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("tas");
       break;
     case 131:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("gas");
       break;
     case 132:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("nas");
       break;
     case 133:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("kas");
       break;
     case 134:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("vas");
       break;
     case 135:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("bas");
       break;
     case 136:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("as");
       break;
     case 137:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("cin");
       break;
     case 138:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("astaj");
       break;
     case 139:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("istaj");
       break;
     case 140:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ostaj");
       break;
     case 141:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("asta");
       break;
     case 142:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ista");
       break;
     case 143:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("osta");
       break;
     case 144:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ava");
       break;
     case 145:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("eva");
       break;
     case 146:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("iva");
       break;
     case 147:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("uva");
       break;
     case 148:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ova");
       break;
     case 149:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("jeti");
       break;
     case 150:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("inj");
       break;
     case 151:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ist");
       break;
     case 152:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("es");
       break;
     case 153:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("et");
       break;
     case 154:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("is");
       break;
     case 155:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ir");
       break;
     case 156:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ur");
       break;
     case 157:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("uj");
       break;
     case 158:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ni");
       break;
     case 159:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("sn");
       break;
     case 160:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("ta");
       break;
     case 161:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("a");
       break;
     case 162:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("i");
       break;
     case 163:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
       slice_from("e");
       break;
     case 164:
-      if (!r_R2())
+      if (!(B_no_diacritics))
       {
         return false;
       }
@@ -3706,9 +3661,7 @@ private boolean r_Step_3() {
 public boolean stem() {
   r_cyr_to_lat();
   r_prelude();
-  int v_3 = cursor;
   r_mark_regions();
-  cursor = v_3;
   limit_backward = cursor;
   cursor = limit;
   int v_4 = limit - cursor;
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/YiddishStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/YiddishStemmer.java
new file mode 100644
index 0000000..6c50831
--- /dev/null
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/YiddishStemmer.java
@@ -0,0 +1,1381 @@
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
+
+package org.tartarus.snowball.ext;
+
+import org.tartarus.snowball.Among;
+
+/**
+ * This class implements the stemming algorithm defined by a snowball script.
+ * <p>
+ * Generated by Snowball 2.0.0 - https://snowballstem.org/
+ * </p>
+ */
+@SuppressWarnings("unused")
+public class YiddishStemmer extends org.tartarus.snowball.SnowballStemmer {
+
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+
+private final static Among a_0[] = {
+  new Among("\u05D0\u05D3\u05D5\u05E8\u05DB", -1, 1),
+  new Among("\u05D0\u05D4\u05D9\u05E0", -1, 1),
+  new Among("\u05D0\u05D4\u05E2\u05E8", -1, 1),
+  new Among("\u05D0\u05D4\u05F2\u05DE", -1, 1),
+  new Among("\u05D0\u05D5\u05DE", -1, 1),
+  new Among("\u05D0\u05D5\u05E0\u05D8\u05E2\u05E8", -1, 1),
+  new Among("\u05D0\u05D9\u05D1\u05E2\u05E8", -1, 1),
+  new Among("\u05D0\u05E0", -1, 1),
+  new Among("\u05D0\u05E0\u05D8", 7, 1),
+  new Among("\u05D0\u05E0\u05D8\u05E7\u05E2\u05D2\u05E0", 8, 1),
+  new Among("\u05D0\u05E0\u05D9\u05D3\u05E2\u05E8", 7, 1),
+  new Among("\u05D0\u05E4", -1, 1),
+  new Among("\u05D0\u05E4\u05D9\u05E8", 11, 1),
+  new Among("\u05D0\u05E7\u05E2\u05D2\u05E0", -1, 1),
+  new Among("\u05D0\u05E8\u05D0\u05E4", -1, 1),
+  new Among("\u05D0\u05E8\u05D5\u05DE", -1, 1),
+  new Among("\u05D0\u05E8\u05D5\u05E0\u05D8\u05E2\u05E8", -1, 1),
+  new Among("\u05D0\u05E8\u05D9\u05D1\u05E2\u05E8", -1, 1),
+  new Among("\u05D0\u05E8\u05F1\u05E1", -1, 1),
+  new Among("\u05D0\u05E8\u05F1\u05E4", -1, 1),
+  new Among("\u05D0\u05E8\u05F2\u05E0", -1, 1),
+  new Among("\u05D0\u05F0\u05E2\u05E7", -1, 1),
+  new Among("\u05D0\u05F1\u05E1", -1, 1),
+  new Among("\u05D0\u05F1\u05E4", -1, 1),
+  new Among("\u05D0\u05F2\u05E0", -1, 1),
+  new Among("\u05D1\u05D0", -1, 1),
+  new Among("\u05D1\u05F2", -1, 1),
+  new Among("\u05D3\u05D5\u05E8\u05DB", -1, 1),
+  new Among("\u05D3\u05E2\u05E8", -1, 1),
+  new Among("\u05DE\u05D9\u05D8", -1, 1),
+  new Among("\u05E0\u05D0\u05DB", -1, 1),
+  new Among("\u05E4\u05D0\u05E8", -1, 1),
+  new Among("\u05E4\u05D0\u05E8\u05D1\u05F2", 31, 1),
+  new Among("\u05E4\u05D0\u05E8\u05F1\u05E1", 31, 1),
+  new Among("\u05E4\u05D5\u05E0\u05D0\u05E0\u05D3\u05E2\u05E8", -1, 1),
+  new Among("\u05E6\u05D5", -1, 1),
+  new Among("\u05E6\u05D5\u05D6\u05D0\u05DE\u05E2\u05E0", 35, 1),
+  new Among("\u05E6\u05D5\u05E0\u05F1\u05E4", 35, 1),
+  new Among("\u05E6\u05D5\u05E8\u05D9\u05E7", 35, 1),
+  new Among("\u05E6\u05E2", -1, 1)
+};
+
+private final static Among a_1[] = {
+  new Among("\u05D3\u05D6\u05E9", -1, -1),
+  new Among("\u05E9\u05D8\u05E8", -1, -1),
+  new Among("\u05E9\u05D8\u05E9", -1, -1),
+  new Among("\u05E9\u05E4\u05E8", -1, -1)
+};
+
+private final static Among a_2[] = {
+  new Among("\u05D5\u05E0\u05D2", -1, 1),
+  new Among("\u05E1\u05D8\u05D5", -1, 1),
+  new Among("\u05D8", -1, 1),
+  new Among("\u05D1\u05E8\u05D0\u05DB\u05D8", 2, 31),
+  new Among("\u05E1\u05D8", 2, 1),
+  new Among("\u05D9\u05E1\u05D8", 4, 1),
+  new Among("\u05D2\u05D9\u05E1\u05D8", 5, 33),
+  new Among("\u05E9\u05D9\u05E1\u05D8", 5, 33),
+  new Among("\u05E9\u05D0\u05E4\u05D8", 2, 1),
+  new Among("\u05D4\u05F2\u05D8", 2, 1),
+  new Among("\u05E7\u05F2\u05D8", 2, 1),
+  new Among("\u05D9\u05E7\u05F2\u05D8", 10, 1),
+  new Among("\u05DC\u05E2\u05DB", -1, 1),
+  new Among("\u05E2\u05DC\u05E2\u05DB", 12, 1),
+  new Among("\u05D9\u05D6\u05DE", -1, 1),
+  new Among("\u05D9\u05DE", -1, 1),
+  new Among("\u05E2\u05DE", -1, 1),
+  new Among("\u05E2\u05E0\u05E2\u05DE", 16, 3),
+  new Among("\u05D8\u05E2\u05E0\u05E2\u05DE", 17, 4),
+  new Among("\u05E0", -1, 1),
+  new Among("\u05E7\u05DC\u05D9\u05D1\u05E0", 19, 14),
+  new Among("\u05E8\u05D9\u05D1\u05E0", 19, 15),
+  new Among("\u05D8\u05E8\u05D9\u05D1\u05E0", 21, 12),
+  new Among("\u05E9\u05E8\u05D9\u05D1\u05E0", 21, 7),
+  new Among("\u05D4\u05F1\u05D1\u05E0", 19, 27),
+  new Among("\u05E9\u05F0\u05D9\u05D2\u05E0", 19, 17),
+  new Among("\u05D6\u05D5\u05E0\u05D2\u05E0", 19, 22),
+  new Among("\u05E9\u05DC\u05D5\u05E0\u05D2\u05E0", 19, 25),
+  new Among("\u05E6\u05F0\u05D5\u05E0\u05D2\u05E0", 19, 24),
+  new Among("\u05D1\u05F1\u05D2\u05E0", 19, 26),
+  new Among("\u05D1\u05D5\u05E0\u05D3\u05E0", 19, 20),
+  new Among("\u05F0\u05D9\u05D6\u05E0", 19, 11),
+  new Among("\u05D8\u05E0", 19, 4),
+  new Among("GE\u05D1\u05D9\u05D8\u05E0", 32, 9),
+  new Among("GE\u05DC\u05D9\u05D8\u05E0", 32, 13),
+  new Among("GE\u05DE\u05D9\u05D8\u05E0", 32, 8),
+  new Among("\u05E9\u05E0\u05D9\u05D8\u05E0", 32, 19),
+  new Among("\u05E1\u05D8\u05E0", 32, 1),
+  new Among("\u05D9\u05E1\u05D8\u05E0", 37, 1),
+  new Among("GE\u05D1\u05D9\u05E1\u05E0", 19, 10),
+  new Among("\u05E9\u05DE\u05D9\u05E1\u05E0", 19, 18),
+  new Among("GE\u05E8\u05D9\u05E1\u05E0", 19, 16),
+  new Among("\u05E2\u05E0", 19, 1),
+  new Among("\u05D2\u05D0\u05E0\u05D2\u05E2\u05E0", 42, 5),
+  new Among("\u05E2\u05DC\u05E2\u05E0", 42, 1),
+  new Among("\u05E0\u05D5\u05DE\u05E2\u05E0", 42, 6),
+  new Among("\u05D9\u05D6\u05DE\u05E2\u05E0", 42, 1),
+  new Among("\u05E9\u05D8\u05D0\u05E0\u05E2\u05E0", 42, 29),
+  new Among("\u05D8\u05E8\u05D5\u05E0\u05E7\u05E0", 19, 23),
+  new Among("\u05E4\u05D0\u05E8\u05DC\u05F1\u05E8\u05E0", 19, 28),
+  new Among("\u05E9\u05F0\u05F1\u05E8\u05E0", 19, 30),
+  new Among("\u05F0\u05D5\u05D8\u05E9\u05E0", 19, 21),
+  new Among("\u05D2\u05F2\u05E0", 19, 5),
+  new Among("\u05E1", -1, 1),
+  new Among("\u05D8\u05E1", 53, 4),
+  new Among("\u05E0\u05E1", 53, 1),
+  new Among("\u05D8\u05E0\u05E1", 55, 4),
+  new Among("\u05E2\u05E0\u05E1", 55, 3),
+  new Among("\u05E2\u05E1", 53, 1),
+  new Among("\u05D9\u05E2\u05E1", 58, 2),
+  new Among("\u05E2\u05DC\u05E2\u05E1", 58, 1),
+  new Among("\u05E2\u05E8\u05E1", 53, 1),
+  new Among("\u05E2\u05E0\u05E2\u05E8\u05E1", 61, 1),
+  new Among("\u05E2", -1, 1),
+  new Among("\u05D8\u05E2", 63, 4),
+  new Among("\u05E1\u05D8\u05E2", 64, 1),
+  new Among("\u05D9\u05E2", 63, -1),
+  new Among("\u05E2\u05DC\u05E2", 63, 1),
+  new Among("\u05E2\u05E0\u05E2", 63, 3),
+  new Among("\u05D8\u05E2\u05E0\u05E2", 68, 4),
+  new Among("\u05E2\u05E8", -1, 1),
+  new Among("\u05D8\u05E2\u05E8", 70, 4),
+  new Among("\u05E1\u05D8\u05E2\u05E8", 71, 1),
+  new Among("\u05E2\u05E0\u05E2\u05E8", 70, 3),
+  new Among("\u05D8\u05E2\u05E0\u05E2\u05E8", 73, 4),
+  new Among("\u05D5\u05EA", -1, 32)
+};
+
+private final static Among a_3[] = {
+  new Among("\u05D5\u05E0\u05D2", -1, 1),
+  new Among("\u05E9\u05D0\u05E4\u05D8", -1, 1),
+  new Among("\u05D4\u05F2\u05D8", -1, 1),
+  new Among("\u05E7\u05F2\u05D8", -1, 1),
+  new Among("\u05D9\u05E7\u05F2\u05D8", 3, 1),
+  new Among("\u05DC", -1, 2)
+};
+
+private final static Among a_4[] = {
+  new Among("\u05D9\u05D2", -1, 1),
+  new Among("\u05D9\u05E7", -1, 1),
+  new Among("\u05D3\u05D9\u05E7", 1, 1),
+  new Among("\u05E0\u05D3\u05D9\u05E7", 2, 1),
+  new Among("\u05E2\u05E0\u05D3\u05D9\u05E7", 3, 2),
+  new Among("\u05D1\u05DC\u05D9\u05E7", 1, -1),
+  new Among("\u05D2\u05DC\u05D9\u05E7", 1, -1),
+  new Among("\u05E0\u05D9\u05E7", 1, 1),
+  new Among("\u05D9\u05E9", -1, 1)
+};
+
+private static final char g_niked[] = {255, 155, 6 };
+
+private static final char g_vowel[] = {33, 2, 4, 0, 6 };
+
+private static final char g_consonant[] = {239, 254, 253, 131 };
+
+private int I_x;
+private int I_p1;
+
+
+private boolean r_prelude() {
+  int v_1 = cursor;
+  lab0: {
+    while(true)
+    {
+      int v_2 = cursor;
+      lab1: {
+        golab2: while(true)
+        {
+          int v_3 = cursor;
+          lab3: {
+            lab4: {
+              int v_4 = cursor;
+              lab5: {
+                bra = cursor;
+                if (!(eq_s("\u05D5\u05D5")))
+                {
+                  break lab5;
+                }
+                ket = cursor;
+                {
+                  int v_5 = cursor;
+                  lab6: {
+                    if (!(eq_s("\u05BC")))
+                    {
+                      break lab6;
+                    }
+                    break lab5;
+                  }
+                  cursor = v_5;
+                }
+                slice_from("\u05F0");
+                break lab4;
+              }
+              cursor = v_4;
+              lab7: {
+                bra = cursor;
+                if (!(eq_s("\u05D5\u05D9")))
+                {
+                  break lab7;
+                }
+                ket = cursor;
+                {
+                  int v_6 = cursor;
+                  lab8: {
+                    if (!(eq_s("\u05B4")))
+                    {
+                      break lab8;
+                    }
+                    break lab7;
+                  }
+                  cursor = v_6;
+                }
+                slice_from("\u05F1");
+                break lab4;
+              }
+              cursor = v_4;
+              lab9: {
+                bra = cursor;
+                if (!(eq_s("\u05D9\u05D9")))
+                {
+                  break lab9;
+                }
+                ket = cursor;
+                {
+                  int v_7 = cursor;
+                  lab10: {
+                    if (!(eq_s("\u05B4")))
+                    {
+                      break lab10;
+                    }
+                    break lab9;
+                  }
+                  cursor = v_7;
+                }
+                slice_from("\u05F2");
+                break lab4;
+              }
+              cursor = v_4;
+              lab11: {
+                bra = cursor;
+                if (!(eq_s("\u05DA")))
+                {
+                  break lab11;
+                }
+                ket = cursor;
+                slice_from("\u05DB");
+                break lab4;
+              }
+              cursor = v_4;
+              lab12: {
+                bra = cursor;
+                if (!(eq_s("\u05DD")))
+                {
+                  break lab12;
+                }
+                ket = cursor;
+                slice_from("\u05DE");
+                break lab4;
+              }
+              cursor = v_4;
+              lab13: {
+                bra = cursor;
+                if (!(eq_s("\u05DF")))
+                {
+                  break lab13;
+                }
+                ket = cursor;
+                slice_from("\u05E0");
+                break lab4;
+              }
+              cursor = v_4;
+              lab14: {
+                bra = cursor;
+                if (!(eq_s("\u05E3")))
+                {
+                  break lab14;
+                }
+                ket = cursor;
+                slice_from("\u05E4");
+                break lab4;
+              }
+              cursor = v_4;
+              bra = cursor;
+              if (!(eq_s("\u05E5")))
+              {
+                break lab3;
+              }
+              ket = cursor;
+              slice_from("\u05E6");
+            }
+            cursor = v_3;
+            break golab2;
+          }
+          cursor = v_3;
+          if (cursor >= limit)
+          {
+            break lab1;
+          }
+          cursor++;
+        }
+        continue;
+      }
+      cursor = v_2;
+      break;
+    }
+  }
+  cursor = v_1;
+  int v_8 = cursor;
+  lab15: {
+    while(true)
+    {
+      int v_9 = cursor;
+      lab16: {
+        golab17: while(true)
+        {
+          int v_10 = cursor;
+          lab18: {
+            bra = cursor;
+            if (!(in_grouping(g_niked, 1456, 1474)))
+            {
+              break lab18;
+            }
+            ket = cursor;
+            slice_del();
+            cursor = v_10;
+            break golab17;
+          }
+          cursor = v_10;
+          if (cursor >= limit)
+          {
+            break lab16;
+          }
+          cursor++;
+        }
+        continue;
+      }
+      cursor = v_9;
+      break;
+    }
+  }
+  cursor = v_8;
+  return true;
+}
+
+private boolean r_mark_regions() {
+  I_p1 = limit;
+  int v_1 = cursor;
+  lab0: {
+    bra = cursor;
+    if (!(eq_s("\u05D2\u05E2")))
+    {
+      cursor = v_1;
+      break lab0;
+    }
+    ket = cursor;
+    slice_from("GE");
+  }
+  int v_2 = cursor;
+  lab1: {
+    if (find_among(a_0) == 0)
+    {
+      cursor = v_2;
+      break lab1;
+    }
+    lab2: {
+      int v_3 = cursor;
+      lab3: {
+        lab4: {
+          int v_4 = cursor;
+          lab5: {
+            if (!(eq_s("\u05E6\u05D5\u05D2\u05E0")))
+            {
+              break lab5;
+            }
+            break lab4;
+          }
+          cursor = v_4;
+          lab6: {
+            if (!(eq_s("\u05E6\u05D5\u05E7\u05D8")))
+            {
+              break lab6;
+            }
+            break lab4;
+          }
+          cursor = v_4;
+          if (!(eq_s("\u05E6\u05D5\u05E7\u05E0")))
+          {
+            break lab3;
+          }
+        }
+        {
+          int v_5 = cursor;
+          lab7: {
+            {
+              int c = cursor + 1;
+              if (0 > c || c > limit)
+              {
+                break lab7;
+              }
+              cursor = c;
+            }
+            break lab3;
+          }
+          cursor = v_5;
+        }
+        {
+          int c = cursor + -4;
+          if (0 > c || c > limit)
+          {
+            break lab3;
+          }
+          cursor = c;
+        }
+        break lab2;
+      }
+      cursor = v_3;
+      lab8: {
+        bra = cursor;
+        if (!(eq_s("\u05D2\u05E2")))
+        {
+          break lab8;
+        }
+        ket = cursor;
+        slice_from("GE");
+        break lab2;
+      }
+      cursor = v_3;
+      bra = cursor;
+      if (!(eq_s("\u05E6\u05D5")))
+      {
+        cursor = v_2;
+        break lab1;
+      }
+      ket = cursor;
+      slice_from("TSU");
+    }
+  }
+  int v_6 = cursor;
+  {
+    int c = cursor + 3;
+    if (0 > c || c > limit)
+    {
+      return false;
+    }
+    cursor = c;
+  }
+  I_x = cursor;
+  cursor = v_6;
+  int v_7 = cursor;
+  lab9: {
+    if (find_among(a_1) == 0)
+    {
+      cursor = v_7;
+      break lab9;
+    }
+  }
+  {
+    int v_8 = cursor;
+    lab10: {
+      if (!(in_grouping(g_consonant, 1489, 1520)))
+      {
+        break lab10;
+      }
+      if (!(in_grouping(g_consonant, 1489, 1520)))
+      {
+        break lab10;
+      }
+      if (!(in_grouping(g_consonant, 1489, 1520)))
+      {
+        break lab10;
+      }
+      I_p1 = cursor;
+      return false;
+    }
+    cursor = v_8;
+  }
+  golab11: while(true)
+  {
+    int v_9 = cursor;
+    lab12: {
+      if (!(in_grouping(g_vowel, 1488, 1522)))
+      {
+        break lab12;
+      }
+      cursor = v_9;
+      break golab11;
+    }
+    cursor = v_9;
+    if (cursor >= limit)
+    {
+      return false;
+    }
+    cursor++;
+  }
+  while(true)
+  {
+    lab13: {
+      if (!(in_grouping(g_vowel, 1488, 1522)))
+      {
+        break lab13;
+      }
+      continue;
+    }
+    break;
+  }
+  I_p1 = cursor;
+  lab14: {
+    if (!(I_p1 < I_x))
+    {
+      break lab14;
+    }
+    I_p1 = I_x;
+  }
+  return true;
+}
+
+private boolean r_R1() {
+  if (!(I_p1 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
+
+private boolean r_standard_suffix() {
+  int among_var;
+  int v_1 = limit - cursor;
+  lab0: {
+    ket = cursor;
+    among_var = find_among_b(a_2);
+    if (among_var == 0)
+    {
+      break lab0;
+    }
+    bra = cursor;
+    switch (among_var) {
+      case 1:
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_del();
+        break;
+      case 2:
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_from("\u05D9\u05E2");
+        break;
+      case 3:
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_del();
+        {
+          int v_2 = limit - cursor;
+          lab1: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D2\u05D0\u05E0\u05D2")))
+            {
+              break lab1;
+            }
+            bra = cursor;
+            slice_from("\u05D2\u05F2");
+            break lab0;
+          }
+          cursor = limit - v_2;
+        }
+        {
+          int v_3 = limit - cursor;
+          lab2: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E0\u05D5\u05DE")))
+            {
+              break lab2;
+            }
+            bra = cursor;
+            slice_from("\u05E0\u05E2\u05DE");
+            break lab0;
+          }
+          cursor = limit - v_3;
+        }
+        {
+          int v_4 = limit - cursor;
+          lab3: {
+            ket = cursor;
+            if (!(eq_s_b("\u05DE\u05D9\u05D8")))
+            {
+              break lab3;
+            }
+            bra = cursor;
+            slice_from("\u05DE\u05F2\u05D3");
+            break lab0;
+          }
+          cursor = limit - v_4;
+        }
+        {
+          int v_5 = limit - cursor;
+          lab4: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D1\u05D9\u05D8")))
+            {
+              break lab4;
+            }
+            bra = cursor;
+            slice_from("\u05D1\u05F2\u05D8");
+            break lab0;
+          }
+          cursor = limit - v_5;
+        }
+        {
+          int v_6 = limit - cursor;
+          lab5: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D1\u05D9\u05E1")))
+            {
+              break lab5;
+            }
+            bra = cursor;
+            slice_from("\u05D1\u05F2\u05E1");
+            break lab0;
+          }
+          cursor = limit - v_6;
+        }
+        {
+          int v_7 = limit - cursor;
+          lab6: {
+            ket = cursor;
+            if (!(eq_s_b("\u05F0\u05D9\u05D6")))
+            {
+              break lab6;
+            }
+            bra = cursor;
+            slice_from("\u05F0\u05F2\u05D6");
+            break lab0;
+          }
+          cursor = limit - v_7;
+        }
+        {
+          int v_8 = limit - cursor;
+          lab7: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D8\u05E8\u05D9\u05D1")))
+            {
+              break lab7;
+            }
+            bra = cursor;
+            slice_from("\u05D8\u05E8\u05F2\u05D1");
+            break lab0;
+          }
+          cursor = limit - v_8;
+        }
+        {
+          int v_9 = limit - cursor;
+          lab8: {
+            ket = cursor;
+            if (!(eq_s_b("\u05DC\u05D9\u05D8")))
+            {
+              break lab8;
+            }
+            bra = cursor;
+            slice_from("\u05DC\u05F2\u05D8");
+            break lab0;
+          }
+          cursor = limit - v_9;
+        }
+        {
+          int v_10 = limit - cursor;
+          lab9: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E7\u05DC\u05D9\u05D1")))
+            {
+              break lab9;
+            }
+            bra = cursor;
+            slice_from("\u05E7\u05DC\u05F2\u05D1");
+            break lab0;
+          }
+          cursor = limit - v_10;
+        }
+        {
+          int v_11 = limit - cursor;
+          lab10: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E8\u05D9\u05D1")))
+            {
+              break lab10;
+            }
+            bra = cursor;
+            slice_from("\u05E8\u05F2\u05D1");
+            break lab0;
+          }
+          cursor = limit - v_11;
+        }
+        {
+          int v_12 = limit - cursor;
+          lab11: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E8\u05D9\u05E1")))
+            {
+              break lab11;
+            }
+            bra = cursor;
+            slice_from("\u05E8\u05F2\u05E1");
+            break lab0;
+          }
+          cursor = limit - v_12;
+        }
+        {
+          int v_13 = limit - cursor;
+          lab12: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05F0\u05D9\u05D2")))
+            {
+              break lab12;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05F0\u05F2\u05D2");
+            break lab0;
+          }
+          cursor = limit - v_13;
+        }
+        {
+          int v_14 = limit - cursor;
+          lab13: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05DE\u05D9\u05E1")))
+            {
+              break lab13;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05DE\u05F2\u05E1");
+            break lab0;
+          }
+          cursor = limit - v_14;
+        }
+        {
+          int v_15 = limit - cursor;
+          lab14: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05E0\u05D9\u05D8")))
+            {
+              break lab14;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05E0\u05F2\u05D3");
+            break lab0;
+          }
+          cursor = limit - v_15;
+        }
+        {
+          int v_16 = limit - cursor;
+          lab15: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05E8\u05D9\u05D1")))
+            {
+              break lab15;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05E8\u05F2\u05D1");
+            break lab0;
+          }
+          cursor = limit - v_16;
+        }
+        {
+          int v_17 = limit - cursor;
+          lab16: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D1\u05D5\u05E0\u05D3")))
+            {
+              break lab16;
+            }
+            bra = cursor;
+            slice_from("\u05D1\u05D9\u05E0\u05D3");
+            break lab0;
+          }
+          cursor = limit - v_17;
+        }
+        {
+          int v_18 = limit - cursor;
+          lab17: {
+            ket = cursor;
+            if (!(eq_s_b("\u05F0\u05D5\u05D8\u05E9")))
+            {
+              break lab17;
+            }
+            bra = cursor;
+            slice_from("\u05F0\u05D9\u05D8\u05E9");
+            break lab0;
+          }
+          cursor = limit - v_18;
+        }
+        {
+          int v_19 = limit - cursor;
+          lab18: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D6\u05D5\u05E0\u05D2")))
+            {
+              break lab18;
+            }
+            bra = cursor;
+            slice_from("\u05D6\u05D9\u05E0\u05D2");
+            break lab0;
+          }
+          cursor = limit - v_19;
+        }
+        {
+          int v_20 = limit - cursor;
+          lab19: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D8\u05E8\u05D5\u05E0\u05E7")))
+            {
+              break lab19;
+            }
+            bra = cursor;
+            slice_from("\u05D8\u05E8\u05D9\u05E0\u05E7");
+            break lab0;
+          }
+          cursor = limit - v_20;
+        }
+        {
+          int v_21 = limit - cursor;
+          lab20: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E6\u05F0\u05D5\u05E0\u05D2")))
+            {
+              break lab20;
+            }
+            bra = cursor;
+            slice_from("\u05E6\u05F0\u05D9\u05E0\u05D2");
+            break lab0;
+          }
+          cursor = limit - v_21;
+        }
+        {
+          int v_22 = limit - cursor;
+          lab21: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05DC\u05D5\u05E0\u05D2")))
+            {
+              break lab21;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05DC\u05D9\u05E0\u05D2");
+            break lab0;
+          }
+          cursor = limit - v_22;
+        }
+        {
+          int v_23 = limit - cursor;
+          lab22: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D1\u05F1\u05D2")))
+            {
+              break lab22;
+            }
+            bra = cursor;
+            slice_from("\u05D1\u05F2\u05D2");
+            break lab0;
+          }
+          cursor = limit - v_23;
+        }
+        {
+          int v_24 = limit - cursor;
+          lab23: {
+            ket = cursor;
+            if (!(eq_s_b("\u05D4\u05F1\u05D1")))
+            {
+              break lab23;
+            }
+            bra = cursor;
+            slice_from("\u05D4\u05F2\u05D1");
+            break lab0;
+          }
+          cursor = limit - v_24;
+        }
+        {
+          int v_25 = limit - cursor;
+          lab24: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E4\u05D0\u05E8\u05DC\u05F1\u05E8")))
+            {
+              break lab24;
+            }
+            bra = cursor;
+            slice_from("\u05E4\u05D0\u05E8\u05DC\u05D9\u05E8");
+            break lab0;
+          }
+          cursor = limit - v_25;
+        }
+        {
+          int v_26 = limit - cursor;
+          lab25: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05D8\u05D0\u05E0")))
+            {
+              break lab25;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05D8\u05F2");
+            break lab0;
+          }
+          cursor = limit - v_26;
+        }
+        {
+          int v_27 = limit - cursor;
+          lab26: {
+            ket = cursor;
+            if (!(eq_s_b("\u05E9\u05F0\u05F1\u05E8")))
+            {
+              break lab26;
+            }
+            bra = cursor;
+            slice_from("\u05E9\u05F0\u05E2\u05E8");
+            break lab0;
+          }
+          cursor = limit - v_27;
+        }
+        break;
+      case 4:
+        {
+          int v_28 = limit - cursor;
+          lab27: {
+            if (!r_R1())
+            {
+              break lab27;
+            }
+            slice_del();
+            {
+              int v_29 = limit - cursor;
+              lab28: {
+                ket = cursor;
+                lab29: {
+                  int v_30 = limit - cursor;
+                  lab30: {
+                    if (!(eq_s_b("\u05D2\u05E2\u05D1\u05E8\u05D0\u05DB")))
+                    {
+                      break lab30;
+                    }
+                    break lab29;
+                  }
+                  cursor = limit - v_30;
+                  if (!(eq_s_b("\u05D1\u05E8\u05D0\u05DB")))
+                  {
+                    break lab28;
+                  }
+                }
+                bra = cursor;
+                slice_from("\u05D1\u05E8\u05E2\u05E0\u05D2");
+                break lab27;
+              }
+              cursor = limit - v_29;
+            }
+            break lab0;
+          }
+          cursor = limit - v_28;
+        }
+        while(true)
+        {
+          lab31: {
+            {
+              int c = cursor - -1;
+              if (limit_backward > c || c > limit)
+              {
+                break lab31;
+              }
+              cursor = c;
+            }
+            continue;
+          }
+          break;
+        }
+        ket = cursor;
+        lab32: {
+          int v_32 = limit - cursor;
+          lab33: {
+            if (!(eq_s_b("\u05E2\u05E0\u05E2\u05E8")))
+            {
+              break lab33;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab34: {
+            if (!(eq_s_b("\u05E2\u05E0\u05E2\u05DE")))
+            {
+              break lab34;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab35: {
+            if (!(eq_s_b("\u05E2\u05E0\u05E2")))
+            {
+              break lab35;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab36: {
+            if (!(eq_s_b("\u05E0")))
+            {
+              break lab36;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab37: {
+            if (!(eq_s_b("\u05E2\u05E8")))
+            {
+              break lab37;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab38: {
+            if (!(eq_s_b("\u05E0\u05E1")))
+            {
+              break lab38;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          lab39: {
+            if (!(eq_s_b("\u05E2")))
+            {
+              break lab39;
+            }
+            break lab32;
+          }
+          cursor = limit - v_32;
+          if (!(eq_s_b("\u05E1")))
+          {
+            break lab0;
+          }
+        }
+        bra = cursor;
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_del();
+        break;
+      case 5:
+        slice_from("\u05D2\u05F2");
+        break;
+      case 6:
+        slice_from("\u05E0\u05E2\u05DE");
+        break;
+      case 7:
+        slice_from("\u05E9\u05E8\u05F2\u05D1");
+        break;
+      case 8:
+        slice_from("\u05DE\u05F2\u05D3");
+        break;
+      case 9:
+        slice_from("\u05D1\u05F2\u05D8");
+        break;
+      case 10:
+        slice_from("\u05D1\u05F2\u05E1");
+        break;
+      case 11:
+        slice_from("\u05F0\u05F2\u05D6");
+        break;
+      case 12:
+        slice_from("\u05D8\u05E8\u05F2\u05D1");
+        break;
+      case 13:
+        slice_from("\u05DC\u05F2\u05D8");
+        break;
+      case 14:
+        slice_from("\u05E7\u05DC\u05F2\u05D1");
+        break;
+      case 15:
+        slice_from("\u05E8\u05F2\u05D1");
+        break;
+      case 16:
+        slice_from("\u05E8\u05F2\u05E1");
+        break;
+      case 17:
+        slice_from("\u05E9\u05F0\u05F2\u05D2");
+        break;
+      case 18:
+        slice_from("\u05E9\u05DE\u05F2\u05E1");
+        break;
+      case 19:
+        slice_from("\u05E9\u05E0\u05F2\u05D3");
+        break;
+      case 20:
+        slice_from("\u05D1\u05D9\u05E0\u05D3");
+        break;
+      case 21:
+        slice_from("\u05F0\u05D9\u05D8\u05E9");
+        break;
+      case 22:
+        slice_from("\u05D6\u05D9\u05E0\u05D2");
+        break;
+      case 23:
+        slice_from("\u05D8\u05E8\u05D9\u05E0\u05E7");
+        break;
+      case 24:
+        slice_from("\u05E6\u05F0\u05D9\u05E0\u05D2");
+        break;
+      case 25:
+        slice_from("\u05E9\u05DC\u05D9\u05E0\u05D2");
+        break;
+      case 26:
+        slice_from("\u05D1\u05F2\u05D2");
+        break;
+      case 27:
+        slice_from("\u05D4\u05F2\u05D1");
+        break;
+      case 28:
+        slice_from("\u05E4\u05D0\u05E8\u05DC\u05D9\u05E8");
+        break;
+      case 29:
+        slice_from("\u05E9\u05D8\u05F2");
+        break;
+      case 30:
+        slice_from("\u05E9\u05F0\u05E2\u05E8");
+        break;
+      case 31:
+        slice_from("\u05D1\u05E8\u05E2\u05E0\u05D2");
+        break;
+      case 32:
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_from("\u05D4");
+        break;
+      case 33:
+        {
+          int c = cursor - -4;
+          if (limit_backward > c || c > limit)
+          {
+            break lab0;
+          }
+          cursor = c;
+        }
+        ket = cursor;
+        if (!(eq_s_b("\u05D8")))
+        {
+          break lab0;
+        }
+        bra = cursor;
+        if (!r_R1())
+        {
+          break lab0;
+        }
+        slice_del();
+        break;
+    }
+  }
+  cursor = limit - v_1;
+  int v_33 = limit - cursor;
+  lab40: {
+    ket = cursor;
+    among_var = find_among_b(a_3);
+    if (among_var == 0)
+    {
+      break lab40;
+    }
+    bra = cursor;
+    switch (among_var) {
+      case 1:
+        if (!r_R1())
+        {
+          break lab40;
+        }
+        slice_del();
+        break;
+      case 2:
+        if (!r_R1())
+        {
+          break lab40;
+        }
+        if (!(in_grouping_b(g_consonant, 1489, 1520)))
+        {
+          break lab40;
+        }
+        slice_del();
+        break;
+    }
+  }
+  cursor = limit - v_33;
+  int v_34 = limit - cursor;
+  lab41: {
+    ket = cursor;
+    among_var = find_among_b(a_4);
+    if (among_var == 0)
+    {
+      break lab41;
+    }
+    bra = cursor;
+    switch (among_var) {
+      case 1:
+        if (!r_R1())
+        {
+          break lab41;
+        }
+        slice_del();
+        break;
+      case 2:
+        if (!r_R1())
+        {
+          break lab41;
+        }
+        {
+          int v_35 = limit - cursor;
+          lab42: {
+            int v_36 = limit - cursor;
+            lab43: {
+              int v_37 = limit - cursor;
+              lab44: {
+                if (!(eq_s_b("\u05E0\u05D2")))
+                {
+                  break lab44;
+                }
+                break lab43;
+              }
+              cursor = limit - v_37;
+              lab45: {
+                if (!(eq_s_b("\u05E0\u05E7")))
+                {
+                  break lab45;
+                }
+                break lab43;
+              }
+              cursor = limit - v_37;
+              lab46: {
+                if (!(eq_s_b("\u05E0")))
+                {
+                  break lab46;
+                }
+                break lab43;
+              }
+              cursor = limit - v_37;
+              lab47: {
+                if (!(eq_s_b("\u05DE")))
+                {
+                  break lab47;
+                }
+                break lab43;
+              }
+              cursor = limit - v_37;
+              lab48: {
+                if (!(eq_s_b("Lamed")))
+                {
+                  break lab48;
+                }
+                if (!(in_grouping_b(g_consonant, 1489, 1520)))
+                {
+                  break lab48;
+                }
+                break lab43;
+              }
+              cursor = limit - v_37;
+              if (!(in_grouping_b(g_vowel, 1488, 1522)))
+              {
+                break lab42;
+              }
+            }
+            cursor = limit - v_36;
+            slice_del();
+            break lab41;
+          }
+          cursor = limit - v_35;
+        }
+        {
+          int c = cursor - -5;
+          if (limit_backward > c || c > limit)
+          {
+            break lab41;
+          }
+          cursor = c;
+        }
+        if (!(eq_s_b("\u05E0\u05D3\u05D9\u05E7")))
+        {
+          break lab41;
+        }
+        slice_del();
+        break;
+    }
+  }
+  cursor = limit - v_34;
+  int v_38 = limit - cursor;
+  lab49: {
+    while(true)
+    {
+      int v_39 = limit - cursor;
+      lab50: {
+        golab51: while(true)
+        {
+          int v_40 = limit - cursor;
+          lab52: {
+            ket = cursor;
+            lab53: {
+              int v_41 = limit - cursor;
+              lab54: {
+                if (!(eq_s_b("GE")))
+                {
+                  break lab54;
+                }
+                break lab53;
+              }
+              cursor = limit - v_41;
+              if (!(eq_s_b("TSU")))
+              {
+                break lab52;
+              }
+            }
+            bra = cursor;
+            slice_del();
+            cursor = limit - v_40;
+            break golab51;
+          }
+          cursor = limit - v_40;
+          if (cursor <= limit_backward)
+          {
+            break lab50;
+          }
+          cursor--;
+        }
+        continue;
+      }
+      cursor = limit - v_39;
+      break;
+    }
+  }
+  cursor = limit - v_38;
+  return true;
+}
+
+public boolean stem() {
+  r_prelude();
+  int v_2 = cursor;
+  r_mark_regions();
+  cursor = v_2;
+  limit_backward = cursor;
+  cursor = limit;
+  r_standard_suffix();
+  cursor = limit_backward;
+  return true;
+}
+
+@Override
+public boolean equals( Object o ) {
+  return o instanceof YiddishStemmer;
+}
+
+@Override
+public int hashCode() {
+  return YiddishStemmer.class.getName().hashCode();
+}
+
+
+
+}
+
diff --git a/lucene/analysis/common/src/test/org/apache/lucene/analysis/snowball/languages.txt b/lucene/analysis/common/src/test/org/apache/lucene/analysis/snowball/languages.txt
index 3526815..d60456d 100644
--- a/lucene/analysis/common/src/test/org/apache/lucene/analysis/snowball/languages.txt
+++ b/lucene/analysis/common/src/test/org/apache/lucene/analysis/snowball/languages.txt
@@ -30,3 +30,4 @@ Spanish
 Swedish
 Tamil
 Turkish
+Yiddish