Приведенный ниже фрагмент переименует ключ ассоциативного массива при сохранении порядка (иногда ... мы должны). Вы можете заменить значение $ нового ключа, если вам нужно полностью заменить элемент.
$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;
Если вам конкретно нужно поведение, подобное YACC (управляемое таблицей), я знаю только CUP .
В мире Java кажется, что больше люди склоняются к синтаксическим анализаторам с рекурсивным спуском, таким как ANTLR или JavaCC .
И эффективность редко является причиной выбора генератора синтаксического анализатора.
Раньше я использовал ANLTR и для лексера, и для парсера, и на домашней странице JFlex говорится, что он может взаимодействовать с ANTLR. Я бы не сказал, что онлайн-документация ANTLR настолько хороша. В итоге я инвестировал в «Окончательный справочник по ANTLR» , который мне очень помог.
GNU Bison имеет интерфейс Java,
http://www.gnu.org/software/bison/manual /html_node/Java-Bison-Interface.html
Вы можете использовать его для создания кода Java.
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.