Идеи для создания программы лексического анализатора с использованием java

Я пытаюсь создать программу лексического анализатора с использованием java. Программа должна иметь концепцию токенизации. У меня есть знания начального уровня в программировании компилятора. Я знаю, что в Интернете существует множество лексических генераторов. Я могу использовать их для проверки своих собственных лексических вывод анализатора. Но мне нужно сделать свой собственный лексический анализатор. Может ли кто-нибудь дать несколько лучших ссылок, статей или идей, чтобы начать писать?


person Thabo    schedule 22.07.2012    source источник
comment
есть ли что-то конкретное, с чем у вас проблемы? или просто общая идея.   -  person John Kane    schedule 22.07.2012
comment
У меня проблемы с поиском ключевых слов, комментариев, WhiteSpace и т. д. Но я думаю, что смогу сделать это легко, если получу общее представление.   -  person Thabo    schedule 22.07.2012
comment
Вы хотите создать инструмент лексического анализа для распознавания токенов определенного языка? Или вы хотите создать инструмент-генератор лексеров, который принимает описания токенов и создает инструмент лексического анализа?   -  person Ira Baxter    schedule 22.07.2012
comment
@Ira Baxter На самом деле я хочу создать инструмент лексического анализа для распознавания токенов исходного кода Java.   -  person Thabo    schedule 22.07.2012


Ответы (2)


Я бы попробовал взглянуть на исходный код некоторых из лучших. Раньше я использовал Sablecc. Если вы перейдете на эту страницу с описанием того, как настроить среду, вы увидите ссылка на исходный код. Antlr также очень часто используется. Вот исходный код для него.

Кроме того, Книга Дракона действительно хороша.

По предложению SK-logic я добавляю современную реализацию компилятора как еще один вариант.

person John Kane    schedule 22.07.2012
comment
спасибо посмотрю на них - person Thabo; 22.07.2012
comment
Книга Дракона действительно устарела - person SK-logic; 23.07.2012
comment
Почему у книги Dragon есть 2-е издание .... Оно устарело? Я думаю, что книга, упомянутая в ответах Стивена С., - это та же книга. - person Thabo; 23.07.2012
comment
@SK-logic, у вас есть другие предложения? Это книга, с которой я работал, когда не так давно проходил курс по компиляторам, и я нашел ее приличной. - person John Kane; 23.07.2012
comment
@Thabo да, я думаю, что ты прав. Я просто никогда не слышал, чтобы кто-то называл его настоящим именем. - person John Kane; 23.07.2012
comment
@JohnKane, есть много статей о GLR, PEG и всем таком. Книга Дракона продвигает методы, которые совершенно неуместны в наши дни. - person SK-logic; 23.07.2012
comment
@SK-logic, вы читали обновленную версию, вышедшую в 2006 году? Они добавили разделы, посвященные JIT-компиляции, сборке мусора, параллелизму, динамической компиляции... Эта книга была (и, я полагаю, по-прежнему остается) одной из (если не де-факто) книг по теории компиляторов. Это действительно тщательно и дает много деталей о том, какие проблемы нужно решать. Да, есть текущие исследовательские работы, описывающие новые подходы. Однако они, скорее всего, не помогут тому, кто заявил, что у него есть знания начального уровня в программировании компилятора. - person John Kane; 23.07.2012
comment
@JohnKane, книга немного улучшилась, но все же - ни SSA, ни CPS, ни моря узлов, ни синтаксического анализа Packrat, ни одного из современных алгоритмов распределения регистров. Он размывает то, что действительно важно, и углубляется в детали неуместного. Парсинг вообще почти не актуален, да и занимает больше половины книги. И все алгоритмы разбора там устарели. Я бы никогда не рекомендовал эту книгу для начинающих. Appel намного лучше с точки зрения кривой обучения и актуальности. - person SK-logic; 23.07.2012
comment
@SK-logic Я отредактировал свой ответ и добавил его как еще один ресурс. Я бы не очень считал парсинг неактуальным (тем более, что вопрос был именно об этом). Есть вещи, которые не рассматриваются в этой книге, но освещаются в других, но в них подчеркиваются вопросы, которые необходимо решать нейтральным к языку способом. Они заявили, что написали его таким образом, полагая, что большинство людей, читающих его, не будут писать полный компилятор, а вместо этого сосредоточатся на текущих проблемах. Я тоже склонен так смотреть на вещи. - person John Kane; 23.07.2012
comment
@JohnKane, самое худшее в Книге Дракона то, что все, кто ее читал, думали, что компиляторы сложны и хитры, тогда как на самом деле компиляция - одна из самых простых вещей. И их непропорциональный акцент на парсинге явно вреден. Писать компиляторы очень и очень легко — если только вы не читали эту ужасную книгу. - person SK-logic; 23.07.2012
comment
@SK-logic Это твое мнение. Я читал ее (вместе со многими другими людьми), и они сочли ее очень полезной. Я также видел, как многие люди рассматривают Modern Compiler Assessment с теми же жалобами, что и вы, жалуясь на ужасные примеры. Также они рассказывают о лексическом и синтаксическом анализе для двух глав из 12-13. Я не уверен, насколько это непропорционально или вредно. Я думаю, что мы оба высказали свое мнение, и это не должно продолжаться. - person John Kane; 23.07.2012

В «Принципах, методах и инструментах компиляторов» Ахо Сети и Ульмана есть глава о лексических анализаторах. Он включает в себя большую часть теории регулярных выражений и конечных автоматов, которые являются ключевыми для этой проблемной области.

person Stephen C    schedule 22.07.2012
comment
спасибо посмотрю эту книгу - person Thabo; 22.07.2012