From 77d0a6c32a39d8170df67ab413da71b6d0cacfb9 Mon Sep 17 00:00:00 2001 From: Mike Lischke Date: Sat, 23 Apr 2016 11:10:12 +0200 Subject: [PATCH] Serialized ATN generation changed. Originally the serialized ATN was coded as a wide string literal with embeded Unicode escapes (where necessary). This might fail on Windows however, as VS is very strict when checking Unicode code points and rejects compilation if it finds undefined code points. Hence this generation has been changed to hex numbers instead of that string literal. --- runtime/Cpp/demo/generate.sh | 6 +++--- .../antlr/v4/tool/templates/codegen/Cpp/Cpp.stg | 10 ++++++---- .../v4/tool/templates/codegen/Cpp/Files.stg | 17 +++++++++-------- tool/src/org/antlr/v4/codegen/CppTarget.java | 4 +++- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/runtime/Cpp/demo/generate.sh b/runtime/Cpp/demo/generate.sh index 2fc22964b..b26f026c4 100755 --- a/runtime/Cpp/demo/generate.sh +++ b/runtime/Cpp/demo/generate.sh @@ -9,8 +9,8 @@ set -o errexit # There are 2 ways of running the ANTLR generator here. # 1) Running from jar. Use the given jar (or replace it by another one you built or downloaded) for generation. -LOCATION=antlr-4.1.1-dev-complete.jar -java -jar $LOCATION -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest TLexer.g4 TParser.g4 +#LOCATION=antlr-4.1.1-dev-complete.jar +#java -jar $LOCATION -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest TLexer.g4 TParser.g4 #java -jar $LOCATION -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest -XdbgST TLexer.g4 TParser.g4 #java -jar $LOCATION -Dlanguage=Java -listener -visitor -o generated/ -package antlrcpptest TLexer.g4 TParser.g4 @@ -23,7 +23,7 @@ java -jar $LOCATION -Dlanguage=Cpp -listener -visitor -o generated/ -package ant # antlr jar over and over again. CLASSPATH=../../../tool/resources/:ST-4.0.8.jar:../../../tool/target/classes:../../../runtime/Java/target/classes:../../../../antlr3/runtime/Java/target/classes -#java -cp $CLASSPATH org.antlr.v4.Tool -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest TLexer.g4 TParser.g4 +java -cp $CLASSPATH org.antlr.v4.Tool -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest TLexer.g4 TParser.g4 #java -cp $CLASSPATH org.antlr.v4.Tool -Dlanguage=Cpp -listener -visitor -o generated/ -package antlrcpptest -XdbgST TLexer.g4 TParser.g4 #java -cp $CLASSPATH org.antlr.v4.Tool -Dlanguage=Java -listener -visitor -o generated/ TLexer.g4 TParser.g4 diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg index fd727863c..2eeb8a875 100644 --- a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg @@ -354,15 +354,17 @@ static std::wstring _serializedATN; // Constructs the serialized ATN and writes init code for static member vars. SerializedATN(model) ::= << - = - L" "}>";}; separator="\n"> + = { + }> +\};}; separator="\n"> _serializedATN = }; separator=" +\n">; -_serializedATN = - L" "}>"; +_serializedATN = { + }> +}; atn::ATNDeserializer deserializer; diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Files.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Files.stg index d1d07d91f..62b35288d 100644 --- a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Files.stg +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Files.stg @@ -154,10 +154,10 @@ class BaseListener : public Listener { void exit(::Context *ctx) { \} }; separator="\n"> - void enterEveryRule(ParserRuleContext ctx) { } - void exitEveryRule(ParserRuleContext ctx) { } - void visitTerminal(tree::TerminalNode node) { } - void visitErrorNode(tree::ErrorNode node) { } + void enterEveryRule(ParserRuleContext::Ref ctx) { } + void exitEveryRule(ParserRuleContext::Ref ctx) { } + void visitTerminal(std::shared_ptr\ node) { } + void visitErrorNode(std::shared_ptr\ node) { } }; @@ -239,10 +239,11 @@ namespace { template \ class BaseVisitor : public tree::AbstractParseTreeVisitor\, public Visitor\ { public: - (::Context *ctx) <\\> - override { return tree::AbstractParseTreeVisitor\::visitChildren(ctx); \} - }; separator="\n"> +(::Context *ctx) override { + return tree::AbstractParseTreeVisitor\::visitChildren(ctx); + \} +}; separator="\n"> }; diff --git a/tool/src/org/antlr/v4/codegen/CppTarget.java b/tool/src/org/antlr/v4/codegen/CppTarget.java index a05b3fa83..b3cbcd1de 100644 --- a/tool/src/org/antlr/v4/codegen/CppTarget.java +++ b/tool/src/org/antlr/v4/codegen/CppTarget.java @@ -176,7 +176,7 @@ public class CppTarget extends Target { if (v < Character.MIN_VALUE || v > Character.MAX_VALUE) { throw new IllegalArgumentException(String.format("Cannot encode the specified value: %d", v)); } - +/* if (v >= 0 && v < targetCharValueEscape.length && targetCharValueEscape[v] != null) { return targetCharValueEscape[v]; } @@ -192,6 +192,8 @@ public class CppTarget extends Target { String hex = Integer.toHexString(v | 0x10000).substring(1, 5); return "\\u" + hex; + */ + return "0x" + Integer.toHexString(v) + ", "; } @Override