Евгений Темиргалеев писал(а):
Вы сравниваете специально "подрезанный" Coco/R с более мощным построителем сканеров flex
Обратите внимание, слово "
специально" - Вы произнесли.
Но если "
специально", тогда информация о том, что сделать вложенные комментарии невозможно (in this way) - сознательная дезинформация обществености.
Потому-что невозможно-то стало по-причине "подрезки" возможности ввести стартовое состояние Comment (картинки я уже рисовал, и way там был ровно такой же). По Вашим словам -
специально.
Не знаю как Вы, а я о Мэтрах лучше думаю....
Евгений, должен Вам заметить, что предположение о том, что я сравниваю нечто с каким-то flex-ом - являются для меня оскорбительными. Потому-что предполагают у меня
слишком банальное мышление.
Мои сравнения идут со Знаниями, которые я получил (методом make it as simple....), в том числе изучая и flex, и Coco/R, и....
Их я изложил в вышестоящем посте.
Для обсуждения, между прочим (в результате которого могли БЫ появиться новые знания). Хотя и не зацепил при этом ни кого из Великих.
Евгений Темиргалеев писал(а):
Для неё сделан более простой инструмент
Не смешите мои подковы
Разные стартовые состояния - не более, чем + нескольких строк кода, и минус коды некоторых "сущностей", которые после этого станут до смешного ненужными.
Евгений Темиргалеев писал(а):
Для тех простых языков, которые можно описать на Coco/R мы получаем сразу и сканер и парсер. Это, по заявлянию Мёссенбока, легче, нежели использование двух более мощных инструментов для генерации отдельных сканера и парсера и их последующего сращивания. Т. е. оправдывает введение описанных Вами дополнительных сущностей.
С первым согласен на все 100.
Что подтверждается моим же "хоть бери, и сам делай ему правильный front-end"
Это не боле 20% всего кода.... Наверное.
И получаем все то же самое, но для любых LL(1)-языков. И не только LL(1), если вспомнить про Оберон
Поэтому со вторым НЕ согласен на те же 100%. Не оправдывает. Ключница водку делала!
Евгений Темиргалеев писал(а):
Т.е. взять язык (для которого средств Coco/R достаточно) и сравнить решения на Coco/R и flex+bison...
Возьмите, как будто кто-то не дает.
Пример у Вас на столе - (Coco)CR.arg
Поправьте его так, чтобы Coco-комментарий не включался внутри семантик. Писал же уже выше...
Утверждение (предположительное): не выйдет ни фига у Вас.
Предвидя вопрос "
а надо ли...", отвечу: Надо, Федя, надо!
Ибо, если тебе Компилятор (хоть и компиляторов) имя, имя крепи делами своми
А не вопросами из серии "
а надо ли..."
Евгений Темиргалеев писал(а):
было предложено "подробно ознакомиться с результатами исследований" "до того, как делать выводы
И что будет
Неужели мне после такого чтения перестанет быть понятно, как записывать через РБНФ комментарии, семантические действия, как обойтись без ANY ???
Неужели количество семантик литералов уменьшится с трех до одного ???
Это же две принципиально разные работы: изучать существо дела, и копаться в цитатниках. Второй я и не владею как-то...
Евгений Темиргалеев писал(а):
Вот Вам для пущего спокойствия ещё ссылка - на профессора Вирта: "Compiler Construction", 7.4, задача 2
Это не более чем намек.
А вот это - фактический материал:
Цитата:
Even Oberon has constructs that cannot be parsed by looking at their syntax alone. For example, a designator is defined in Oberon as
Designator = Qualident {"." ident | "^" | "[" ExprList "]" | "(" Qualident ")" }.
where x(T) means a type guard (i.e., x is asserted to be of type T). A designator may be used in a statement
Statement = … | Designator ["(" ExprList ")"] | … .
Here x(T) can be interpreted as a designator x (a procedure name) and a parameter T. The two interpretations of x(T) can only be distinguished by looking at the type of x. If it is a procedure then the opening bracket is the start of a parameter list, otherwise the bracket belongs to a type guard.
Cocol/R allows control of the parser from within semantic actions to a certain degree. A designator, for example, can be processed in the following way:
Код:
Designator <VAR x: Item> =
Qualident <x>
{ …
| (. IF x is procedure THEN RETURN END .)
"(" Qualident <y> ")" (. process type guard .)
} .
И если
внимательно приглядеться к этому хаку, то понимаешь - ноги за такое выдергивать надо, а не специфицировать таковую возможность