if(true)
От: MAPCUAHUH  
Дата: 24.05.07 12:13
Оценка:
Здраствуйте,

изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:

if(true){ //some code
}


возник вопрос зачем генерится этот оператор if а не просто код в блоке?
Re: if(true)
От: akotlyarov Россия  
Дата: 24.05.07 15:37
Оценка:
Здравствуйте, MAPCUAHUH, Вы писали:

MAP>Здраствуйте,


MAP> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:


MAP>
MAP>if(true){ //some code
MAP>}

MAP>


MAP>возник вопрос зачем генерится этот оператор if а не просто код в блоке?



Возможно там должна быть переменная — а она прнимает всегда одно и то же значение — и отимизатор сделал подстановку
Re[2]: if(true)
От: MAPCUAHUH  
Дата: 24.05.07 17:35
Оценка:
Здравствуйте, akotlyarov, Вы писали:

A>Здравствуйте, MAPCUAHUH, Вы писали:


MAP>>Здраствуйте,


MAP>> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:


MAP>>
MAP>>if(true){ //some code
MAP>>}

MAP>>


MAP>>возник вопрос зачем генерится этот оператор if а не просто код в блоке?



A>Возможно там должна быть переменная — а она прнимает всегда одно и то же значение — и отимизатор сделал подстановку


только я не декомптлтровал классы JavaCC генерит сами.java фаилы откуда оптимизатору взяться?
и в цнлях оптимизации тогда легче иф убрать совсем
Re[3]: if(true)
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 24.05.07 18:02
Оценка:
JavaCC — это Java Compiler Compiler? Киньте ссылку на это место в коде, интересно посмотреть (можно через репозитарий это сделать).
http://jvmmemory.com — простой способ настройки JVM
Re[4]: if(true)
От: MAPCUAHUH  
Дата: 25.05.07 06:22
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>JavaCC — это Java Compiler Compiler? Киньте ссылку на это место в коде, интересно посмотреть (можно через репозитарий это сделать).

да JavaCC Это Java Compiler Compiler Где взять гугл покажет (не помню где,сам там искал)

Вот сам проект(скинул все сгенерированные фаилы + грамматику) здесь (12KB)

в Фаиле Calculator.java находим простым поиском строчку:


   if(true){return value;}
Re[5]: if(true)
От: Gajdalager Украина  
Дата: 25.05.07 06:53
Оценка: 1 (1)
Здравствуйте, 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
Re: if(true)
От: dshe  
Дата: 25.05.07 07:02
Оценка:
Здравствуйте, MAPCUAHUH, Вы писали:

MAP>Здраствуйте,


MAP> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:


MAP>
MAP>if(true){ //some code
MAP>}

MAP>


MAP>возник вопрос зачем генерится этот оператор if а не просто код в блоке?


Полагаю, что низачем. Мало ли какие перлы генераторы исходного кода генерят. С точки зрения разработчика генератора, может быть проще генерить код по одному шаблону, чем по куче шаблонов для каждого особого случая. К счастью, javac достаточно интелектуален, чтобы ничего лишнего не генерить на if (true).
--
Дмитро
Re[6]: if(true)
От: C0s Россия  
Дата: 25.05.07 10:12
Оценка:
Здравствуйте, Gajdalager, Вы писали:

G>Зачем там throw new Error("Missing return statement in function"); — другой вопрос, не знаю, с парсерами не работал


я тоже с парсерами не работал, но предположу, что здесь цель в более точной диагностике возможных ошибок кодогенератора
Re: if(true)
От: Stanislav Elinson  
Дата: 25.05.07 12:36
Оценка:
MAPCUAHUH wrote:
> изучая JavaCC просмотрел генерируемый код и увидел такую кончтрукцию:
>
> if(true){ //some code
> }

Да просто никто никогда не занимался оптимизацией генерируемого кода при условии, что это сможет потом соптимировать
компилятор.

MfG Stas
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.