KSC gets stuck in an infinite loop on file icc_4.ksy
When trying to compile [icc_4.ksy](https://github.com/kaitai-io/kaitai_struct_formats/blob/f303f85e757d36db31db67681ae89205622efb6c/image/icc_4.ksy) from the formats gallery, it seems that the compiling would run forever if I didn't stop it. I'm sure it's reproducible, I've encountered it on both JVM and JS compilers (and I frankly don't know how to bring the devel Web IDE back to work, because it keeps loading the same file so I always have to kill the tab, and I couldn't found the relevant item in the local storage).

I've managed to get the stack trace from the `VisualVM` profiler:

<details>
  <summary>JVM stack trace</summary>

```
"main" #1 prio=5 os_prio=0 tid=0x00000000022f3800 nid=0x1d28 runnable [0x00000000021eb000]
   java.lang.Thread.State: RUNNABLE
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4282)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4799)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4731)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4616)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4286)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4248)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3791)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4815)
	at java.util.regex.Pattern$Prolog.match(Pattern.java:4755)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4672)
	at java.util.regex.Pattern$Begin.match(Pattern.java:3539)
	at java.util.regex.Matcher.match(Matcher.java:1270)
	at java.util.regex.Matcher.matches(Matcher.java:604)
	at scala.util.matching.Regex.runMatcher(Regex.scala:351)
	at scala.util.matching.Regex.unapplySeq(Regex.scala:279)
	at io.kaitai.struct.datatype.DataType$.fromYaml(DataType.scala:363)
	at io.kaitai.struct.format.AttrSpec$.$anonfun$parseSwitch$1(AttrSpec.scala:283)
	at io.kaitai.struct.format.AttrSpec$$$Lambda$268/1968552224.apply(Unknown Source)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
	at scala.collection.TraversableLike$$Lambda$6/1435804085.apply(Unknown Source)
	at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
	at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
	at scala.collection.TraversableLike.map(TraversableLike.scala:234)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
	at scala.collection.AbstractTraversable.map(Traversable.scala:104)
	at io.kaitai.struct.format.AttrSpec$.parseSwitch(AttrSpec.scala:279)
	at io.kaitai.struct.format.AttrSpec$.fromYaml2(AttrSpec.scala:219)
	at io.kaitai.struct.format.AttrSpec$.fromYaml(AttrSpec.scala:161)
	at io.kaitai.struct.format.AttrSpec$.fromYaml(AttrSpec.scala:156)
	at io.kaitai.struct.format.ClassSpec$.$anonfun$seqFromYaml$1(ClassSpec.scala:183)
	at io.kaitai.struct.format.ClassSpec$$$Lambda$110/1275009283.apply(Unknown Source)
	at scala.collection.immutable.List.map(List.scala:287)
	at io.kaitai.struct.format.ClassSpec$.seqFromYaml(ClassSpec.scala:182)
	at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:129)
	at io.kaitai.struct.format.ClassSpec$.$anonfun$typesFromYaml$1(ClassSpec.scala:231)
	at io.kaitai.struct.format.ClassSpec$$$Lambda$118/1824322115.apply(Unknown Source)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
	at scala.collection.TraversableLike$$Lambda$6/1435804085.apply(Unknown Source)
	at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
	at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
	at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
	at scala.collection.TraversableLike.map(TraversableLike.scala:234)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
	at scala.collection.AbstractTraversable.map(Traversable.scala:104)
	at io.kaitai.struct.format.ClassSpec$.typesFromYaml(ClassSpec.scala:229)
	at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:133)
	at io.kaitai.struct.format.ClassSpec$.$anonfun$typesFromYaml$1(ClassSpec.scala:231)
	at io.kaitai.struct.format.ClassSpec$$$Lambda$118/1824322115.apply(Unknown Source)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
	at scala.collection.TraversableLike$$Lambda$6/1435804085.apply(Unknown Source)
	at scala.collection.immutable.Map$Map1.foreach(Map.scala:120)
	at scala.collection.TraversableLike.map(TraversableLike.scala:234)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
	at scala.collection.AbstractTraversable.map(Traversable.scala:104)
	at io.kaitai.struct.format.ClassSpec$.typesFromYaml(ClassSpec.scala:229)
	at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:133)
	at io.kaitai.struct.format.ClassSpec$.$anonfun$typesFromYaml$1(ClassSpec.scala:231)
	at io.kaitai.struct.format.ClassSpec$$$Lambda$118/1824322115.apply(Unknown Source)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
	at scala.collection.TraversableLike$$Lambda$6/1435804085.apply(Unknown Source)
	at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
	at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
	at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
	at scala.collection.TraversableLike.map(TraversableLike.scala:234)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
	at scala.collection.AbstractTraversable.map(Traversable.scala:104)
	at io.kaitai.struct.format.ClassSpec$.typesFromYaml(ClassSpec.scala:229)
	at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:133)
	at io.kaitai.struct.format.ClassSpec$.fromYaml(ClassSpec.scala:254)
	at io.kaitai.struct.formats.JavaKSYParser$.fileNameToSpec(JavaKSYParser.scala:42)
	at io.kaitai.struct.formats.JavaKSYParser$.localFileToSpecs(JavaKSYParser.scala:22)
	at io.kaitai.struct.JavaMain.compileOneInput(JavaMain.scala:283)
	at io.kaitai.struct.JavaMain.$anonfun$run$1(JavaMain.scala:261)
	at io.kaitai.struct.JavaMain$$Lambda$90/1131316523.apply(Unknown Source)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
	at scala.collection.TraversableLike$$Lambda$6/1435804085.apply(Unknown Source)
	at scala.collection.immutable.List.foreach(List.scala:389)
	at scala.collection.TraversableLike.map(TraversableLike.scala:234)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
	at scala.collection.immutable.List.map(List.scala:295)
	at io.kaitai.struct.JavaMain.run(JavaMain.scala:256)
	at io.kaitai.struct.JavaMain$.main(JavaMain.scala:247)
	at io.kaitai.struct.JavaMain.main(JavaMain.scala)
```

</details>

It looks like a problem with some regex: maybe some [catastrophic backtracking](https://www.regular-expressions.info/catastrophic.html)?

The format gallery HTML generator doesn't have problem with this only because it's using the stable KSC version (same for stable Web IDE obviously). However, I think we can't actually release the version 0.9 without fixing this because it would likely break the format gallery build.