Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#fail , ?_0 , _V_9 , ^-_<>&
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<k>
#fail , ?_0 , _V_9 , ^-_<>& , .Exps ~> .
</k>
10 changes: 10 additions & 0 deletions k-distribution/tests/regression-new/issue-2356-koreDecode/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
DEF=test
EXT=test
TESTDIR=.
KOMPILE_BACKEND=haskell
KAST_FLAGS=-i kore -o pretty

include ../../../include/kframework/ktest.mak

result2.kore.kast: kompile
${K_BIN}/kore-print result.kore.kast $(CHECK) result.kore.kast.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* Fl Fn D Sfa Cl */
Lbl'-LT-'generatedTop'-GT-'{}(
/* Fl Fn D Sfa Cl */
Lbl'-LT-'k'-GT-'{}(
/* Fl Fn D Sfa Cl */
kseq{}(
/* Fl Fn D Sfa Cli */
/* Inj: */ inj{SortExps{}, SortKItem{}}(
/* Fl Fn D Sfa Cl */
Lbl'UndsCommUndsUnds'TEST-SYNTAX'Unds'Exps'Unds'Exp'Unds'Exps{}(
/* Fl Fn D Sfa Cl */
Lbl'Hash'fail'Unds'TEST-SYNTAX'Unds'Exp{}(),
/* Fl Fn D Sfa Cl */
Lbl'UndsCommUndsUnds'TEST-SYNTAX'Unds'Exps'Unds'Exp'Unds'Exps{}(
/* Fl Fn D Sfa Cl */
Lbl'QuesUnds'0'Unds'TEST-SYNTAX'Unds'Exp{}(),
/* Fl Fn D Sfa Cl */
Lbl'UndsCommUndsUnds'TEST-SYNTAX'Unds'Exps'Unds'Exp'Unds'Exps{}(
/* Fl Fn D Sfa Cl */
Lbl'Unds'V'Unds'9'Unds'TEST-SYNTAX'Unds'Exp{}(),
/* Fl Fn D Sfa Cl */
Lbl'UndsCommUndsUnds'TEST-SYNTAX'Unds'Exps'Unds'Exp'Unds'Exps{}(
/* Fl Fn D Sfa Cl */
Lbl'Xor-'-'Unds-LT--GT-And-Unds'TEST-SYNTAX'Unds'Exp{}(),
/* Fl Fn D Sfa Cl */
Lbl'Stop'List'LBraQuotUndsCommUndsUnds'TEST-SYNTAX'Unds'Exps'Unds'Exp'Unds'Exps'QuotRBraUnds'Exps{}()
)
)
)
)
),
/* Fl Fn D Sfa Cl */ dotk{}()
)
),
/* Fl Fn D Sfa Cl */
Lbl'-LT-'generatedCounter'-GT-'{}(/* Fl Fn D Sfa Cl */ \dv{SortInt{}}("0"))
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<k>
#fail , ?_0 , _V_9 , ^-_<>& , .Exps ~> .
</k>
10 changes: 10 additions & 0 deletions k-distribution/tests/regression-new/issue-2356-koreDecode/test.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module TEST-SYNTAX
syntax Exps ::= List{Exp,","}

syntax Exp ::= "#fail" | "?_0" | "_V_9" | "^-_<>&"
endmodule

module TEST
imports TEST-SYNTAX
configuration <k> $PGM:Exps </k>
endmodule
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ all:
$(MAKE) -C ../imp-llvm clean
$(MAKE) -C ../imp-llvm
$(MAKE) -C ../imp-llvm clean

clean:
13 changes: 12 additions & 1 deletion kernel/src/test/java/org/kframework/utils/StringUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

import junit.framework.Assert;
import org.junit.Test;
import org.kframework.backend.kore.ModuleToKORE;

import java.util.regex.Pattern;

public class StringUtilTest {

Expand Down Expand Up @@ -33,7 +36,15 @@ public void StringUtilUnquote() throws Exception {

@Test
public void decodeKoreString() {
Assert.assertEquals(StringUtil.decodeKoreString("'Unds'V'Unds'9"), "_V_9");
Assert.assertEquals("_V_9", StringUtil.decodeKoreString("'Unds'V'Unds'9"));
Assert.assertEquals("?_0", StringUtil.decodeKoreString("'QuesUnds'0"));
Pattern identChar = Pattern.compile("[A-Za-z0-9\\-]");
StringBuilder buffer = new StringBuilder();
StringUtil.encodeStringToAlphanumeric(buffer, "?_0", ModuleToKORE.asciiReadableEncodingKore, identChar, "'");
Assert.assertEquals("'QuesUnds'0", buffer.toString());
buffer.setLength(0);
StringUtil.encodeStringToAlphanumeric(buffer, "_V_9", ModuleToKORE.asciiReadableEncodingKore, identChar, "'");
Assert.assertEquals("'Unds'V'Unds'9", buffer.toString());
}

@Test
Expand Down
17 changes: 11 additions & 6 deletions kore/src/main/java/org/kframework/utils/StringUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -635,9 +635,15 @@ public static String escapeKoreKLabel(String value) {
private static final Map<String, Character> asciiReadableEncodingDefaultMap = new HashMap<>();
static {
for (int i = 0; i < asciiReadableEncodingDefault.length; i++)
asciiReadableEncodingDefaultMap.put(asciiReadableEncodingDefault[i], (char) i);
if (asciiReadableEncodingDefault[i] != null && asciiReadableEncodingDefault[i].length() > 1)
asciiReadableEncodingDefaultMap.put(asciiReadableEncodingDefault[i], (char) i);
}

/**
* Encode special characters depending on context.
* @param asciiReadableEncodingTable Override the default `asciiReadableEncodingDefault` depending on language requirements
* @param identChar which characters to replace
*/
public static void encodeStringToAlphanumeric(StringBuilder sb, String name, String[] asciiReadableEncodingTable, Pattern identChar, String escapeChar) {
boolean inIdent = true;
for (int i = 0; i < name.length(); i++) {
Expand Down Expand Up @@ -668,18 +674,17 @@ public static void encodeStringToAlphanumeric(StringBuilder sb, String name, Str
public static String decodeKoreString(String encoded) {
boolean quotedState = false;
StringBuilder resultedEncoding = new StringBuilder();
StringBuilder tempSb = new StringBuilder();
for (int i = 0; i < encoded.length(); i++) {
if (quotedState) {
if (encoded.charAt(i) == '\'') {
quotedState = false;
resultedEncoding.append(asciiReadableEncodingDefaultMap.get(tempSb.toString()));
} else
tempSb.append(encoded.charAt(i));
} else {
resultedEncoding.append(asciiReadableEncodingDefaultMap.get(encoded.substring(i, i + 4)));
i += 3;
}
} else {
if (encoded.charAt(i) == '\'') {
quotedState = true;
tempSb = new StringBuilder();
} else
resultedEncoding.append(encoded.charAt(i));
}
Expand Down