|
16 | 16 | import org.kframework.definition.ProductionItem; |
17 | 17 | import org.kframework.definition.RegexTerminal; |
18 | 18 | import org.kframework.definition.Sentence; |
| 19 | +import org.kframework.definition.SortSynonym; |
19 | 20 | import org.kframework.definition.Terminal; |
20 | 21 | import org.kframework.definition.UserList; |
21 | 22 | import org.kframework.kil.loader.Constants; |
@@ -205,13 +206,16 @@ public static ParseInModule getCombinedGrammar(Module mod, boolean strict, boole |
205 | 206 | for (Sort srt : iterable(mod.definedSorts())) { |
206 | 207 | if (!isParserSort(srt) || mod.subsorts().directlyLessThan(Sorts.KVariable(), srt)) { |
207 | 208 | // K ::= K "::Sort" | K ":Sort" | K "<:Sort" | K ":>Sort" |
208 | | - prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), srt)); |
| 209 | + prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), srt, srt)); |
209 | 210 | } |
210 | 211 | } |
211 | | - prods.addAll(makeCasts(Sorts.KLabel(), Sorts.KLabel(), Sorts.KLabel())); |
212 | | - prods.addAll(makeCasts(Sorts.KList(), Sorts.KList(), Sorts.KList())); |
213 | | - prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), Sorts.KItem())); |
214 | | - prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), Sorts.K())); |
| 212 | + prods.addAll(makeCasts(Sorts.KLabel(), Sorts.KLabel(), Sorts.KLabel(), Sorts.KLabel())); |
| 213 | + prods.addAll(makeCasts(Sorts.KList(), Sorts.KList(), Sorts.KList(), Sorts.KList())); |
| 214 | + prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), Sorts.KItem(), Sorts.KItem())); |
| 215 | + prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), Sorts.K(), Sorts.K())); |
| 216 | + for (SortSynonym syn : iterable(mod.sortSynonyms())) { |
| 217 | + prods.addAll(makeCasts(Sorts.KBott(), Sorts.K(), syn.newSort(), syn.oldSort())); |
| 218 | + } |
215 | 219 | } |
216 | 220 |
|
217 | 221 | if (mod.importedModuleNames().contains(RECORD_PRODS)) { |
@@ -444,13 +448,13 @@ private static void makeAllSortTuples(int level, int size, List<Sort> sorts, Lis |
444 | 448 | } |
445 | 449 | } |
446 | 450 |
|
447 | | - private static Set<Sentence> makeCasts(Sort outerSort, Sort innerSort, Sort castSort) { |
| 451 | + private static Set<Sentence> makeCasts(Sort outerSort, Sort innerSort, Sort castSort, Sort labelSort) { |
448 | 452 | Set<Sentence> prods = new HashSet<>(); |
449 | 453 | Att attrs1 = Att().add(Sort.class, castSort); |
450 | | - prods.add(Production(KLabel("#SyntacticCast"), castSort, Seq(NonTerminal(castSort), Terminal("::" + castSort.toString())), attrs1)); |
451 | | - prods.add(Production(KLabel("#SemanticCastTo" + castSort.toString()), castSort, Seq(NonTerminal(castSort), Terminal(":" + castSort.toString())), attrs1)); |
452 | | - prods.add(Production(KLabel("#InnerCast"), outerSort, Seq(Terminal("{"), NonTerminal(castSort), Terminal("}"), Terminal("<:" + castSort.toString())), attrs1)); |
453 | | - prods.add(Production(KLabel("#OuterCast"), castSort, Seq(Terminal("{"), NonTerminal(innerSort), Terminal("}"), Terminal(":>" + castSort.toString())), attrs1)); |
| 454 | + prods.add(Production(KLabel("#SyntacticCast"), castSort, Seq(NonTerminal(labelSort), Terminal("::" + castSort.toString())), attrs1)); |
| 455 | + prods.add(Production(KLabel("#SemanticCastTo" + labelSort.toString()), labelSort, Seq(NonTerminal(labelSort), Terminal(":" + castSort.toString())), attrs1)); |
| 456 | + prods.add(Production(KLabel("#InnerCast"), outerSort, Seq(Terminal("{"), NonTerminal(labelSort), Terminal("}"), Terminal("<:" + castSort.toString())), attrs1)); |
| 457 | + prods.add(Production(KLabel("#OuterCast"), labelSort, Seq(Terminal("{"), NonTerminal(innerSort), Terminal("}"), Terminal(":>" + castSort.toString())), attrs1)); |
454 | 458 | return prods; |
455 | 459 | } |
456 | 460 | } |
0 commit comments