Здравствуйте, Цунцуяби, Вы писали:
Ц>у спирита что "не так" с левой рекурсией? Ц>хотелось бы на спирите, потому что знаю. хотя приветствуется все Ц>Можно ли это сделать на спирите? Ц>Целевые языки C#,С++,С,Java — в порядке убывание важности Ц>можно сюда pav@kzts.ru
ANTLR (www.antlr.org)
Леворекурсивный, умеет разбирать с пробелами, умеет генерить все кроме С.
С примерами правда туговато (они там до боли стандартные, или во всяком случае не те которые нужны), но при желании разобраться можно.
Re[2]: EBNF >> !(boost/Spirit) >> *"может что еще?"
Здравствуйте, Graf Alex, Вы писали:
GA>Здравствуйте, Цунцуяби, Вы писали:
Ц>>у спирита что "не так" с левой рекурсией? Ц>>хотелось бы на спирите, потому что знаю. хотя приветствуется все Ц>>Можно ли это сделать на спирите? Ц>>Целевые языки C#,С++,С,Java — в порядке убывание важности Ц>>можно сюда pav@kzts.ru
GA>ANTLR (www.antlr.org) GA>Леворекурсивный, умеет разбирать с пробелами, умеет генерить все кроме С. GA>С примерами правда туговато (они там до боли стандартные, или во всяком случае не те которые нужны), но при желании разобраться можно.
Или coco/r. Правда сканер при токенизации пробелы "ест", но это лечится 3 строчками кода. Плюсы по сравнению с ANTLR — нет необходимости с полученым парсером тащить run-time поддержку. Минусы — менее навороченный, только LL(1) (в ANTLR заказывать можно).
Посоветуйте пожалуйста!
Нужно написать парсер ( БНФ, ЕБНФ) , который бы разбирал строку, где пробел — терминальный символ
и выдавал бы
вход:
ABC D
выход:
A
AB
ABC
или
ABC D
-----
ABC
AB
A
у спирита что "не так" с левой рекурсией?
хотелось бы на спирите, потому что знаю. хотя приветствуется все
Можно ли это сделать на спирите?
Целевые языки C#,С++,С,Java — в порядке убывание важности
можно сюда pav@kzts.ru
Здравствуйте, Цунцуяби, Вы писали:
Ц>Спасибо большое за помощь! Ц>Подскажите еще, а вкладывается ли в ЕБНФ (БНФ) Ц>то что я написал:
Ц>из входной строки "ABC" получить наборы строк
Ц> ABC,AB,A или A,AB,ABC
Ц>как это записать в нотации
Ц>s = s c | c ? но это соответствует s = c {c}
Ц>что даст только ABC
Ц>Подскажите ?
Еслия понял правильно, то это будет чтото в духе таком:
s : A (B (C)?)?
Re[2]: EBNF >> !(boost/Spirit) >> *"может что еще?"
Здравствуйте, Цунцуяби, Вы писали:
Ц>Спасибо большое за помощь! Ц>Подскажите еще, а вкладывается ли в ЕБНФ (БНФ) Ц>то что я написал:
Ц>из входной строки "ABC" получить наборы строк
Ц> ABC,AB,A или A,AB,ABC
Ц>как это записать в нотации
Ц>s = s c | c ? но это соответствует s = c {c}
Ц>что даст только ABC
Ц>Подскажите ?
S = A [B] C].
Re[3]: EBNF >> !(boost/Spirit) >> *"может что еще?"