ANTLRWorks 1.4.3 не может правильно читать символы расширенного ASCII - PullRequest
3 голосов
/ 04 декабря 2011

Я работаю над довольно стандартным проектом компилятора, для которого я выбрал ANTLR в качестве генератора парсера. При обновлении существующей грамматики с v2 до v3 я заметил, что ANTLRWorks, официальная IDE для ANTLR, не отображает должным образом символы расширенного ASCII в файле. Даже после использования Notepad ++ для преобразования файла в UTF8 из ASCII он все равно отображал эти символы в виде квадратов. В Notepad ++ они отображаются нормально.

Поскольку этот сбой означает, что ANTLRWorks искажает файл, когда я сохраняю его, я больше не могу использовать его в качестве редактора, что довольно раздражает. Кто-нибудь еще здесь сталкивался с этой проблемой и, возможно, решил ее? Очень благодарен.

[ edit ]: специфическая проблема возникает с последней версией ANTLRWorks (скачанной вчера) и с файлом грамматики vams.g, который я получил от http://www.antlr.org/grammar/1086696923011/vhdlams/index.html

1 Ответ

2 голосов
/ 04 декабря 2011

Я не могу воспроизвести это с помощью 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 исходный файл.
...