Токен из двух слов с использованием PLY в Python

#python #compiler-construction #lexer #ply

#python #компилятор-конструкция #лексер #ply

Вопрос:

Я пишу компилятор как часть лабораторного занятия и решил сделать это на Python с использованием PLY. Я потратил некоторое время, пытаясь решить эту конкретную проблему, и зашел в тупик, как и мои помощники в лаборатории.

На языке, который я должен написать, деклараторы указываются двумя словами «был». Например:

x was a number and x became 5.

равно

int x; x = 5;

При синтаксическом анализе с помощью PLY я поместил ‘was a’ в качестве зарезервированного слова

 reserved = {
    ...
    'was a'       : 'DECLARATOR',
    ...
}
 

Но когда я выполняю синтаксический анализ с помощью лексера PLY, он обрабатывает ‘was’ и ‘a’ как отдельные токены

Как я могу анализировать was a как токен типа ‘DECLARATOR’ без разделения его лексером PLY?

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

Спасибо,

Пит

Комментарии:

1. Почему бы просто не сделать его двумя токенами?

2. В конце концов, это то, что я сделал. Мне сказали, что он должен быть способен обрабатывать два слова, но затем это было исправлено другим профессором. Вам никогда не нужно использовать два слова в токене.

Ответ №1:

Вам никогда не придется использовать два слова в токене. Вместо этого разделите их на два отдельных токена и убедитесь, что ваш язык обеспечивает, чтобы за одним всегда следовал другой.

например, реализовать 'was' : 'DECLARATOR_WAS' токен и 'a' : 'DECLARATOR_A' токен.