ANTLR: “пропавшие без вести доступа атрибута на правиле определяют объем” проблемы

Вы включили ASP.NET, прослеживающий уже? У меня был экземпляр, где это не была сама хранимая процедура SQL, которая была проблемой, это было то, что процедура возвратила 5 000 строк, и приложение пыталось создать связанный с данными ListItems с теми 5 000 объектов, который вызывал проблему.

Вы могли бы изучить время выполнения между функциями веб-приложения также через трассировку для помогания отнести вещей дорожки.

8
задан peter.murray.rust 2 November 2009 в 00:10
поделиться

2 ответа

Отвечая на вопрос после того, как нашел лучший способ ...

WS  :    (' '|'\t')+;
TOKEN   :   (('A'..'Z') | ('a'..'z'))+;
dttok   :   'DT' WS TOKEN;
nntok   :   'NN' WS TOKEN; 
nounPhrase :    (dttok WS nntok);
chunker :  nounPhrase ;

Проблема заключалась в том, что я путался между лексером и синтаксическим анализатором (это, по-видимому, очень часто). Элементы верхнего регистра являются лексическими, нижний регистр - синтаксическим анализатором. Теперь это работает. (NB, я изменил NP на NN).

0
ответ дан 5 December 2019 в 10:42
поделиться

В исходной грамматике, почему бы не включить атрибут, который он запрашивает, скорее всего:

chunker : nounPhrase {System.out.println("chunk found "+"("+$nounPhrase.text+")");};

Каждое из ваших правил ( chunker - это то, что я могу быстро определить ) имеют связанные с ними атрибуты (дополнительную информацию). Вы можете найти быстрый список различных атрибутов для разных типов правил на http://www.antlr.org/wiki/display/ANTLR3/Attribute+and+Dynamic+Scopes , было бы неплохо если описания были помещены на веб-страницу для каждого из этих атрибутов (например, атрибуты start и stop для правил синтаксического анализатора относятся к токенам из вашего лексера - что позволит вам вернуться к номеру строки и позиции).

Я думаю, что ваше правило фрагментации следует немного изменить, вместо $ nounPhrase вы должны использовать $ nounPhrase.text . text - это атрибут для вашего правила nounPhrase .

Вы можете также сделать немного другое форматирование, обычно правила парсера (начинаются со строчной буквы) появляются перед лексером правила (начинаются с прописной буквы)

PS. Когда я набираю текст в поле, правило фрагментации начинается с новой строки, но в моем исходном ответе оно не начинается с новой строки.

4
ответ дан 5 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: