Yacc, эквивалентный для Java

Приведенный ниже фрагмент переименует ключ ассоциативного массива при сохранении порядка (иногда ... мы должны). Вы можете заменить значение $ нового ключа, если вам нужно полностью заменить элемент.

$old_key = "key_to_replace";
$new_key = "my_new_key";

$intermediate_array = array();
while (list($key, $value) = each($original_array)) {
  if ($key == $old_key) {
    $intermediate_array[$new_key] = $value;
  }
  else {
    $intermediate_array[$key] = $value;
  }
}
$original_array = $intermediate_array;
28
задан vuzun 28 October 2009 в 19:23
поделиться

4 ответа

Если вам конкретно нужно поведение, подобное YACC (управляемое таблицей), я знаю только CUP .

В мире Java кажется, что больше люди склоняются к синтаксическим анализаторам с рекурсивным спуском, таким как ANTLR или JavaCC .

И эффективность редко является причиной выбора генератора синтаксического анализатора.

18
ответ дан 28 November 2019 в 03:44
поделиться

Раньше я использовал ANLTR и для лексера, и для парсера, и на домашней странице JFlex говорится, что он может взаимодействовать с ANTLR. Я бы не сказал, что онлайн-документация ANTLR настолько хороша. В итоге я инвестировал в «Окончательный справочник по ANTLR» , который мне очень помог.

5
ответ дан 28 November 2019 в 03:44
поделиться

GNU Bison имеет интерфейс Java,

http://www.gnu.org/software/bison/manual /html_node/Java-Bison-Interface.html

Вы можете использовать его для создания кода Java.

3
ответ дан 28 November 2019 в 03:44
поделиться

Another option would be the GOLD Parser.

Unlike many of the alternatives, the GOLD parser generates the parsing tables from the grammar and places them in a binary, non-executable file. Each supported language then has an engine which reads the binary tables and parses your source file.

I've not used the Java implementation specifically, but have used the Delphi engine with fairly good results.

2
ответ дан 28 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

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