Я сейчас пишу свой собственный лексер (и, в конечном итоге, парсер), и пока все работает нормально.Я могу распознать все, что мне нужно, за исключением того, что недавно я столкнулся с небольшой проблемой.Когда я ввожу идентификатор, такой как «символ», лексер выводит токен [ KEYWORD, "char" ]
и другой токен [ IDENTIFIER, "acter" ]
.В настоящее время я обрабатываю вводимые данные: я ищу ключевые слова перед идентификаторами, поэтому что-то вроде int
, которое является действительным для ключевого слова и идентификатора, назначается ключевому слову первым.Но когда идентификатор содержит ключевое слово в начале, он разделяет ID
на две части: одну часть для ключевого слова и вторую часть для ID
.Мне нужно, чтобы остаться как IDENTIFIER
.Если какой-либо код требуется, я буду рад опубликовать его.
РЕДАКТИРОВАТЬ: Вот грамматика (правил синтаксического анализа еще нет) Примечание.перед идентификаторами они имеют приоритет.
КЛЮЧЕВЫЕ СЛОВА: «если» |"еще" |"пока" |"для" |"ложь" |"правда" |"перерыв" |«возврат» |"int" |"плавать" |"чар" |"строка" |"bool" |"пустота" |"null";
ИДЕНТИФИКАТОР: [a-zA-Z _] [a-zA-Z0-9 _] *;
INT_LITERAL: [0-9] +;
FLOAT_LITERAL: [0-9] + '.'[0-9] +