Где обрабатывать парсинг числа с плавающей точкой - сканер или парсер? - PullRequest
2 голосов
/ 11 января 2012

Я нахожусь в процессе разработки небольшого предметно-ориентированного языка. В качестве генераторов сканера / парсера я использую Flex / Bisonc ++. Теперь сгенерированный интерфейс DSL-компилятора способен анализировать восьмеричные, десятичные и шестнадцатеричные числа. Единственное, что осталось, - это поддержка чисел с плавающей запятой (FPN), как указано в C / C ++.

Существует RegExp для синтаксиса числа с плавающей запятой в http://rosettacode.org/wiki/Literals/Floating_point#C

а) Я знаю, что синтаксический анализ может быть выполнен в сканере и / или в анализаторе, но я не знаю, что лучше - с точки зрения производительности и эффективности.

б) Одно дополнительное ограничение заключается в том, что я хочу избегать касания каждого символа ввода более одного раза, то есть я хочу избегать использования STL или других функций преобразования строк в плавающие осуществляя преобразование на лету во время процесса синтаксического анализа. Это возможно?

1 Ответ

2 голосов
/ 11 января 2012

Совершенно и обычно целесообразно, чтобы сканер (код flex) распознавал и преобразовывал числа с плавающей запятой, точно так же, как он должен распознавать и преобразовывать целые числа. Если вы написали целочисленный код распознавания в грамматике (bison код), а не в сканере, то, возможно, вы тоже напишите распознавание с плавающей точкой, но это не так, как обычно. Вам, вероятно, понадобится использовать более сложный (читай «сложный») тип данных для типов токенов; читать на %union.

...