Как мне лучше понять, как SmaCC использует функцию isMethod в регулярных выражениях?
Мне непонятна поддержка isMethod в регулярных выражениях SmaCC.
Эти два источника по сути говорят об одном и том же
- https://files.pharo.org/books-pdfs/booklet-Smacc/2017-10-29-Smacc.pdf
- http://www.refactoryworkers.com/SmaCC/Scanner.html
<isMethod> Copies the characters where Character>>isMethod returns true into
the current regular expression. For example, instead of using \d, we could use
<isDigit> since Character>>isDigit returns true for digits.
Продолжать особо нечего, поэтому у меня есть несколько вопросов:
- Означает ли это, что я могу использовать isWhitespace, isNotWhitespace и т. Д.? (Как мне узнать имена?)
- Означает ли это, что я могу использовать свои собственные токены? (например, isVariable, isMultiLineComment, если я их определю?)
- Могу ли я лучше понять это?
Спасибо за ваше время
2 ответа
По общему признанию, комментарий мог бы быть немного яснее, но, начиная с его примера -
#isDigit
- на изображении только один реализатор:. Таким образом, вероятное значение состоит в том, что вы можете поместить любое сообщение, которое понимает, в скобки.
Чтобы ответить на ваши конкретные вопросы:
Вы не можете использовать
#isWhitespace
потому что такого сообщения нет, но#isSeparator
кажется, делает этоВы узнаете доступные имена, исследуя, например, в браузере.
Да, вы можете использовать свои собственные токены, реализовав их в
Character
(или его суперклассы)Как предположил @Stephan Eggermont, Discord от GT - хорошее место, чтобы спросить. Pharo ML и Discord, как правило, полезны, и на подобный вопрос, вероятно, будет легко ответить там, но чем глубже вы погрузитесь в Smacc, вы найдете меньше экспертов, и сообщество GT в настоящее время активно использует Smacc.
GToolkit Discord - лучшее место для этого вопроса, так как один из авторов оригинала там тусуется.