Я не могу воспроизвести это с помощью ANTLRWorks 1.4.3.
Если я создаю фиктивную грамматику:
grammar T;
parse : . ;
Any : . ;
и вставьте полный расширенный набор ASCII в многострочный комментарий:
grammar T;
/*
€
‚
ƒ
...
ÿ
*/
parse : . ;
Any : . ;
нет проблем. Не имеет значения, копирую ли я символы с помощью ANTLRWorks или с помощью обычного редактора, а затем редактирую существующую грамматику с помощью ANTLRWorks: все символы остаются неизменными после сохранения внутри ANTLRWorks.
Примечание: версии ANTLR 3.0 до 3.3 по-прежнему имеют некоторые зависимости с классами ANTLR 2.7, что может привести к тому, что org.antlr.Tool
будет срабатывать по определенным символам вне набора ASCII. В этом случае используйте ANTLR 3.4, который больше не имеет этих старых зависимостей.
EDIT
Я подозреваю, что где-то в оригинальной грамматике есть какой-то странный байт, который вызывает хаос. Я быстро скопировал только правила из исходной грамматики, изменил весь синтаксис v2.7 на синтаксис v3 (изменил литералы с двойными кавычками на одинарные, protected
стал fragment
и прокомментировал некоторый пользовательский код) и сохранил его в новом файле , Этот файл может быть открыт (и сохранен) с помощью ANTLRWorks или текстового редактора, не заставляя его манипулировать расширенными символами ASCII.
Вот версия ANTLR v3 указанной грамматики: http://pastebin.com/zU4xcvXt (грамматика слишком велика для размещения на SO ...)
РЕДАКТИРОВАТЬ II
Может ли название грамматики быть полезным для чего-то, кроме надписи?
Нет, это не так. Как вы упомянули, он используется только для присвоения парсеру или лексеру имени.
В ANTLR есть 4 типа грамматик:
- объединенная грамматика, которая выглядит как
grammar T;
, генерируя исходные файлы TLexer.java
и TParser.java
;
- грамматика синтаксического анализатора, похожая на
parser grammar TP;
, генерирующая исходный файл TP.java
;
- грамматика лексера, похожая на
lexer grammar TL;
, генерирующая TL.java
исходный файл;
- древовидная грамматика, похожая на
tree grammar TWalker
, генерирующая TWalker.java
исходный файл.