Поставил Нитру, создал новый проект с примером Calc. "Ничего не сделал, только вошёл!"
Запустил, решил посмотреть на вразумительность сообщений о неправильном выражении. Вот выражение: "6 * — / 3"
А вот вывод:
input>6 * - / 3
Pretty print: 6 * - / 3
1:1: Expected: Expression : 100
Result: NaN
Т.е. сами понимаете — ничего вразумительного. Хотя бы начало "6 *" должно считаться валидным, а далее "Ошибка, ожидается число или скобка". А при входе "6 6" выдаёт это:
input>6 6
Pretty print: <# ambiguous Expression, 5 options
6 6
6 6
6 6
6 6
6 6
#>
1:1: Expected: a binary operator
Опять же, как человек-то я понимаю, что написал ерунду, но а как должен это понимать человек, пишущий программу? Шесть-то он ввёл правильно, а далее компилер должен сообщить о проблеме, а не показывать 5 идентичных и бесполезных строчек. Вопрос: это сырой парсер? Возможно, нужны какие-то приседания с грамматикой?
В идеале, мне бы хотелось видеть что-то вроде "вот эта часть строки правильная, а далее могут идти только следующие варианты: expr, sum, etc...". ПЕГ-парсер способен на это?
Здравствуйте, btn1, Вы писали:
B>Т.е. сами понимаете — ничего вразумительного. Хотя бы начало "6 *" должно считаться валидным, а далее "Ошибка, ожидается число или скобка". А при входе "6 6" выдаёт это:
Включи отображение "пропущенных" узлов:
def str = parseTree.ToString(PrettyPrintOptions.MissingNodes);
Возможно, такую печать нужно сделать по-умолчанию...
Здравствуйте, btn1, Вы писали:
B>А вот вывод:
B>input>>6 * - / 3
B>Pretty print: 6 * - / 3
B>1:1: Expected: Expression : 100
B>Result: NaN
B>
Вывод координат в тексте тоже поправил (SingleLineSourceSnapshot багу имел внутрях).