Здраствуйте,
изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
if(true){ //some code
}
возник вопрос зачем генерится этот оператор if а не просто код в блоке?
Здравствуйте, MAPCUAHUH, Вы писали:
MAP>Здраствуйте,
MAP> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
MAP>MAP>if(true){ //some code
MAP>}
MAP>
MAP>возник вопрос зачем генерится этот оператор if а не просто код в блоке?
Возможно там должна быть переменная — а она прнимает всегда одно и то же значение — и отимизатор сделал подстановку
Здравствуйте, akotlyarov, Вы писали:
A>Здравствуйте, MAPCUAHUH, Вы писали:
MAP>>Здраствуйте,
MAP>> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
MAP>>MAP>>if(true){ //some code
MAP>>}
MAP>>
MAP>>возник вопрос зачем генерится этот оператор if а не просто код в блоке?
A>Возможно там должна быть переменная — а она прнимает всегда одно и то же значение — и отимизатор сделал подстановку
только я не декомптлтровал классы JavaCC генерит сами.java фаилы откуда оптимизатору взяться?
и в цнлях оптимизации тогда легче иф убрать совсем
JavaCC — это Java Compiler Compiler? Киньте ссылку на это место в коде, интересно посмотреть (можно через репозитарий это сделать).
Здравствуйте, LeonidV, Вы писали:
LV>JavaCC — это Java Compiler Compiler? Киньте ссылку на это место в коде, интересно посмотреть (можно через репозитарий это сделать).
да JavaCC Это Java Compiler Compiler Где взять гугл покажет (не помню где,сам там искал)
Вот сам проект(скинул все сгенерированные фаилы + грамматику)
здесь (12KB)
в Фаиле Calculator.java находим простым поиском строчку:
if(true){return value;}
Здравствуйте, MAPCUAHUH, Вы писали:
Точнее, там вот так:
{if (true) return value ;}
throw new Error("Missing return statement in function");
Вот такой код
return value ;
throw new Error("Missing return statement in function");
не скомпилируется — Unreachable statement. Зачем там
throw new Error("Missing return statement in function"); — другой вопрос, не знаю, с парсерами не работал
<< RSDN@Home 1.1.4 stable SR1 rev. 568>>
Сейчас играет Children Of Bodom — 06 Taste Of My Scythe
Здравствуйте, MAPCUAHUH, Вы писали:
MAP>Здраствуйте,
MAP> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
MAP>MAP>if(true){ //some code
MAP>}
MAP>
MAP>возник вопрос зачем генерится этот оператор if а не просто код в блоке?
Полагаю, что низачем. Мало ли какие перлы генераторы исходного кода генерят. С точки зрения разработчика генератора, может быть проще генерить код по одному шаблону, чем по куче шаблонов для каждого особого случая. К счастью, javac достаточно интелектуален, чтобы ничего лишнего не генерить на if (true).
Здравствуйте, Gajdalager, Вы писали:
G>Зачем там throw new Error("Missing return statement in function"); — другой вопрос, не знаю, с парсерами не работал
я тоже с парсерами не работал, но предположу, что здесь цель в более точной диагностике
возможных ошибок кодогенератора
MAPCUAHUH wrote:
> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
>
> if(true){ //some code
> }
Да просто никто никогда не занимался оптимизацией генерируемого кода при условии, что это сможет потом соптимировать
компилятор.
MfG Stas
Posted via RSDN NNTP Server 2.1 beta