Ну, я раньше имел ту же проблему, и проблема была решена путем добавления слова" , возврат " прежде подтверждает:
onclick="return confirm('Delete entry?')"
мне жаль, что это не могло быть полезно для Вас..
Удачи!
Всегда полезно прочитать Книгу Дракона . Но имейте в виду, что если ваш язык нетривиален, на самом деле нет "короткого" способа сделать это.
Это скорее зависит от вашего языка. Некоторые очень простые языки требуют очень небольшого анализа, поэтому их можно кодировать вручную; другие языки используют генераторы PEG, такие как Rats! (PEG - это грамматика выражения синтаксического анализатора, которая находится между парсером Regex и LR) или обычные генераторы синтаксического анализатора, такие как Antlr и Yacc. Менее формальные языки требуют вероятностных методов, таких как грамматики ссылок .
Написать Парсер рекурсивного спуска . Иногда это проще, чем YACC / BISON, и обычно более интуитивно понятно.
YACC , существуют разные реализации для разных языков.
Удачи с вашим языком; -)
Я использовал GOLD Parsing System , потому что она казалась более простой в использовании, чем ANTLR для новичка вроде меня, но при этом достаточно -полнофункциональный для моих нужд. Веб-сайт включает документацию (включая инструкции по Написанию грамматик , что составляет половину работы), а также программное обеспечение .
Попробуйте Bison для синтаксического анализа и Flex для лексирования
Определение bison вашего языка имеет форму контекста- свободная грамматика . Википедия по этой теме довольно хороша, и, вероятно, с нее можно начать.
У Дугласа Крокфорда есть доступный пример парсера, написанного на JavaScript .
Заманчиво обратиться к Книге Дракона, чтобы узнать о теории синтаксического анализа. Но я не думаю, что у вас и у Книги Дракона такое же представление о том, что означает «теория». В Dragon Book описывается, как создавать рукописные парсеры, генераторы парсеров и т. Д., Но вы почти наверняка захотите использовать вместо этого инструмент для генерации парсеров.
Некоторые люди предлагали Bison и Flex (или их более старые версии Yacc и Lex ). Это старые приверженцы, но они не очень удобные инструменты. Их документация сама по себе неплоха, просто она не совсем помогает справиться с случайной сложностью их использования. Их внутренние данные плохо инкапсулированы, и с ними очень сложно что-то продвинуть. Например, в phc у нас все еще нет правильных номеров строк, потому что это очень сложно. Они стали лучше, когда мы изменили грамматику, добавив в нее операторы No-op, но это невероятный прием, в котором не должно быть необходимости.
Якобы Bison и Flex работают вместе, но интерфейс неудобен. Хуже того, существует множество версий каждой, которые хорошо работают только с некоторыми конкретными версиями другой. И последнее, что я проверил, по крайней мере, документация о том, какие версии идут с какими, была довольно скудной.
Написание парсера с рекурсивным спуском несложно, но может быть утомительным. Antlr может сделать это за вас, и это, кажется, неплохой набор инструментов, с тем преимуществом, что то, что вы изучаете в этом проекте, можно применить ко многим другим языкам и платформам (Antlr очень портативен). Есть также множество существующих грамматик, из которых можно учиться.
Непонятно, на каком языке вы работаете, но некоторые языки имеют отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.
Короче говоря: Antlr, если у вас нет очень веской причины.
re, но в некоторых языках есть отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.Короче говоря: Antlr, если у вас нет очень веской причины.
re, но в некоторых языках есть отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.Короче говоря: Antlr, если у вас нет очень веской причины.
и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.Короче говоря: Antlr, если у вас нет очень веской причины.
и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.Короче говоря: Antlr, если у вас нет очень веской причины.
Использование генератора синтаксического анализатора для вашего основного языка - самый быстрый способ, в сочетании с теорией синтаксического анализа из такой книги, как Dragon Book или Современная конструкция компилятора в {C, Серия ML}.
Если вы используете C, yacc
и версия GNU bison
являются стандартными генераторами. Насколько мне известно, Antlr широко используется во многих языках, поддерживая Java, C # и C ++. Есть также много других почти на любом языке.
В настоящее время мне больше всего нравится Menhir , отличный генератор парсеров для OCaml. Диалекты языков в стиле ML (Ocaml, Standard ML и т. Д.) В целом очень хороши для создания компиляторов и интерпретаторов.
ANTLR - самый простой способ для тех, кто не знает теории компиляторов, потому что:
ANTLRWORKS (визуальный анализ и отладка AST)
Книга ANTLR (без теории компилятора требуется фон)
Только 1 синтаксис для лексера и парсера.