Хакер писал(а):Вообще говоря, нельзя так громко кричать "нужно". "Нужно" у каждого своё. Мне, например, может оказаться, что дерево разбора и не нужно.
То, что действительно нужно, это данные одного вида (который менее удобен для оперирования ими), перевести в данные другого вида (более удобного).
Каким будет этот "другой вид" — будет ли это дерево, связанный список или массив зависит от тебя и твоей задачи. Так что заявлять, что какой-то там анализатор должен код превратить всенепременно в дерево, — неправильно.
Здесь я согласен. Никто и не говорит что нужно обязательно дерево разбора. Это более абстрактное понятие. Нужно по сути получить ответ "Эта строка принадлежит заданной грамматике?". Если да, то какая зависимость (косой косой и т.д.), если нет, то что именно не так и где...
У каждого своя задача, но задача синтаксического анализа сводится к выяснению этого вопроса
Хакер писал(а):Чем хорошо программирование — здесь можно крутиться и придумывать свои методы. Я изначально отвернулся от методов, придуманных учёными и с тех пор ни разу не пожалел.
Не отрицаю...кто-то может принимать такие методы, кто-то может придумать свои. Я склоняюсь к тому что чтобы придумать свои нужно знать чужие. И тем более, та же студия, тот же VB - они строятся на каких-либо научных методах (я о синтаксических анализаторах). Никто не придумывал свои методы, ибо теория синтаксического анализа идет еще с незапамятных времен...у меня на столе книга 1975 года выпуска, выпускали русские, когда особого распространения ПК и не было, только в научных целях...
Хакер писал(а):Это глупость. Т.е. это невозможная в принципе вещь, даже если реализующий будет неимоверно умён. Что же касается естественных языков: "косил косой косой косой". Последнии три слова одинаковые, но тем не менее, одно из них обозначает зайца, другое инструмент, а третье является прилагальнрым. Которое — какое, не ответишь даже ты, не то что программа.
Так никто и не говорит что это не глупость. И более того я считаю что это не возможно на данном этапе.
По естесственным языкам
Ну вот знаменитая фраза "казнить, нельзя помиловать"\\\"казнить нельзя, помиловать"
Эта та самая неоднозначность, которую можно описать, исключить и удалить.
Вот здесь и выступит в полном объеме грамматика. В зависмости от того, как мы зададим грамматику, предложение примет смысл...Это называется семантика. Синтаксический анализ с семантическим дает идеальную структуру, которая снабжает предложение правильностью написания и смысловой нагрузкой...но вот для естественных языком это очень сложно, но опять таки программисты не пишут (по крайней мере я не видел в у рядовых программистов) синтаксические анализаторы для естественного языка.
Вот например грамматика для фразу "казнить нельзя, помиловать"
S-->stmt_K stmt_N op stmt_P
stmt_K-->Казнить
stmt_N-->нельзя
stmt_P-->помиловать
op-->,Это очень грубо и неэффективно, в реальности все намного сложнее.
Тем не менее стоит поменять S--> ..... и фраза "казнить, нельзя помиловать" уже не станет являться принадлежащей данной грамматике, она будет принадлежать иной грамматике. Совокупность грамматик по сути даст язык. Если собрать эти две грамматики вместе, то сможем обрабатывать обе фразы...
Хакер писал(а): Понятие токен без грамматики то же самое что и атом - самостоятельно они бесполезны.
Здравсьте.
Вот теперь можно ответить и на это.
Что будет если я не знаю что
S-->stmt_K stmt_N op stmt_P а знаю только что есть stmt_K, stmt_N,...?
Ну обработаю я строку начиная с первого слова. Получу сначала "казнить", потом получу "нельзя".....токенизация не даст мне смысловой нагрузки. Поэтому предложение нужно воспринимать как единое целое, т.е. систему
А вообще по сабжу...ИМХО надо взять какую-нибудь грамматику....ну не знаю, пусть тупо это будет инструкция знакомая всем
if stmt then expr else exprИ обработать. Я например попробую описать все с помощью грамматики, а ты своим способом. Проанализируем, подумаем...пусть даже это будет готовая программа, не важно. Просто сравним
Ибо не найти тут истины никому, каждый будет считать что он прав, потому что вложил в это свой труд, время и мозг
Пишите жизнь на чистовик.....переписать не удастся.....