[15:35:48] <valexey > .
[15:36:02] <valexey > vlad2: то что ты описал - это не проблема для лексера. то есть вообще не проблема
[15:36:09] <valexey > неоднозначностей, с точки зрения лексера, нет
[17:22:56] <Сергей Зорин> ?
[17:28:02] <valexey > !
[17:37:33] <Сергей Зорин> lfqji пщиукщт d vfccs
[17:38:32] <Сергей Зорин> дайошь goberon в массы!
[17:54:12] <vlad3> нет, лексер должен будет все равно заглядывать вперед
[18:28:01] <valexey > зачем? лексер не оперирует грамматикой вида LL(n)
[18:28:58] <valexey > У лексера простое одно правило - на выходе код наиболее длинной лексемы.
[18:29:02] <valexey > Это то, о чем Галков долго и упорно коровятам пытался втолковать
[18:29:30] <valexey > Ты рассматриваешь лексер с точки зрения парсера, а это не верно. Отсюда у тебя и проблемы/неоднозначности :-)
[19:06:03] <vlad2> Дык, это все равно не работает для случая int/float
[19:06:46] <vlad2> Потому что лексер в EBNF оберона оперирует только числами 0 - 9
[19:08:45] <vlad2> Да, а еще это совсем не работает для символов (строк)
[19:11:35] <vlad2> Гы! Компиляторы О7 плодятся :)
[19:12:01] <valexey > ога
[19:12:04] <valexey > и да, почему не годится?
[19:12:13] <valexey > int/float распознается однозначно
[19:14:07] <vlad2> Потому что на выходе лексера числа 0-9, точки и т.п., а не integer и float
[19:15:04] <vlad2> А если подразумевается, что на выходе должны быть именно полноценные integer/float/string - то это нигде явно не прописано у Вирта.
[19:15:41] <vlad2> Если тупо взять грамматику оберона из О7 - ничего не распарсится. Собственно на что я и наткнулся.
[19:18:53] <vlad2> Собственно, у меня был вынесен парсинг int/string из EBNF, пока их код не стал превращаться в гавно. И не оказалось нагляднее засунуть их таки в EBNF, но заморочиться порядком и ".."
[19:20:03] <vlad2> Кстати, прикольно, что сообщение про новый компилер запостили на наш форум, а не на оборонкоре ;)
[19:21:28] <vlad2> И, кстати, кода таки стало больше (по размеру), но он не такой страшный (не стало всяких циклов/автоматов).
[19:22:21] <valexey > на выходе числа или таки цифры?
[19:22:50] <vlad2> digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
[19:22:56] <valexey > впрочем, в этом году до компиляторостроения я уже не доберусь.
[19:23:44] <vlad2> Собственно вот это на выходе лексера.
[19:23:56] <vlad2> Если следовать строгой букве.
[19:24:12] <vlad2> И вот в этом случае получается неоднозначность.
[19:25:57] <valexey > цифры
[19:26:14] <valexey > а должны быть числа. на выходе лексера.
[19:27:03] <vlad2> Да, если будут числа/строки, то неоднозначности не будет.
[19:32:57] <valexey > то есть лексемы
[19:32:59] <valexey > а цифры лексемами не являются.  лексемами являются числа, строки, идентификаторы, ключевые слова
[19:42:39] <valexey > по сути, ты попытался львиную долю лексера втащить в парсер и поимел с этого проблемы
[19:42:46] <valexey > о чем Galkov в свое время и говорил :-)
[19:42:59] <valexey > А я, по глупости своей, не понимал о чем он говорит
[19:43:01] <valexey > А коровята его там активно атаковали
[19:48:43] <vlad2> Не-не. Оно как раз нормально сейчас.
[19:49:13] <vlad2> Проблемы были, когда я пытался парсить целиком число/строку "по месту".
[19:49:38] <vlad2> В смысле не проблемы, а страшный автоматный код. С состояниями.
[19:49:56] <vlad2> Все это помножено на убогий жабаскрипт.
[19:50:04] <vlad2> Кстати, я реализовал SET ;)
[19:50:16] <vlad2> Байтораздирающее зрелище ;)
[19:50:51] <vlad2> Еще не до конца реализовал - только конструктор.
[19:51:01] <vlad2> Сделал просто через число.
[19:51:33] <vlad2> Но поскольку там в конструкторе могут быть не константы и диапазоны - получилось страшно.
[19:53:52] <valexey > погоди. разве там могут быть не константы?
[20:02:59] <vlad2> Угу. Тем expression.
[20:03:35] <vlad2> Да и смысла с константами было бы исчезающе мало.
[20:03:54] <vlad2> Очень часто нужно выставить заранее неизветсный бит.
[20:06:45] <vlad2> На самом деле как бы уже все реализовано, кроме предопределенных процедур и операций. А, ну и импорт модулей я буду делать в самом конце.
[20:08:43] <vlad2> И, наверное, вылезу за пределы 64к.