Я пишу свой первый парсер и у меня есть несколько вопросов, касающихся токенизатора.
По сути, мой токенизатор предоставляет функцию nextToken()
, которая должна возвращать следующий токен. Эти токены различаются по типу токенов. Я думаю, что имеет смысл иметь следующие типы токенов:
- СИМВОЛ (например,
<
, :=
, (
и т. П.
- БЕЛЫЙ ПРОБЕЛ (табуляция, новые строки, пробелы ...)
- ЗАМЕЧАНИЕ (комментарий между / * ... * / или после // через новую строку)
- НОМЕР
- IDENT (например, имя функции или переменной)
- STRING (что-то заключенное между "....")
Теперь, как вы думаете, это имеет смысл?
Кроме того, я борюсь с токеном NUMBER
. Как вы думаете, имеет ли смысл разделить его на токены типа NUMBER
и FLOAT
? Без FLOAT
типа токена я получил бы NUMBER
(например, 402), SYMBOL
(.), А затем еще NUMBER
(например, 203), если я собирался проанализировать float.
Наконец, что, по вашему мнению, имеет больше смысла для возврата токенизатора, когда он встречает -909
? Должен ли он сначала вернуть SYMBOL
-
, а затем NUMBER
909
или сразу же вернуть NUMBER
-909
?