Я пытаюсь написать парсер для типа файла, который использует пары ключевых слов (разделенные пробелом), и я изо всех сил пытаюсь это сделать. Некоторые примеры лексем могут быть:Идентификация пар ключевых слов в lex
angle spring
angle dampen
angle collision
Есть также определение блоков и маркеры, которые заканчиваются, что блок, например:
dynamics
angle spring 1.0
angle dampen 0.0
angle collision 0.0
some 1 2 3
more ['stuff' 'here']
tokens "values can be strings, paths, etc"
end dynamics
Newlines кажется значительным, я использую, что для определения если я ищу ключевое слово или просто обычную старую строку (ключевые слова должны быть первым токеном в каждой строке). Правильно ли я подхожу к этому? Должен ли я вместо этого просто различать все и более четко определять пары на этапе yacc?
Спасибо за ваше время!
Я не понимаю, где проблема. Просто используйте regex 'angle \ spring', когда токенизация и синтаксический анализатор никогда не должны знать, что на самом деле он использовал пробел. Если интервал может быть произвольным, вы можете использовать регулярное выражение, например 'angle \ s + spring', чтобы определить токен ключевого слова. Если это не то, что вы хотите, вы должны уточнить, что вы имеете в виду с примером. – Bakuriu
Я следую за примером зарезервированного ключевого слова, как описано в документах ply (http://www.dabeaz.com/ply/ply.html, в разделе 4.3 Спецификация токенов), который пытается сначала сопоставить ключевое слово, прежде чем решить, что это просто строка. Я могу создать специальные правила для всех токенов, которые используют пробелы, я полагаю? – spencewah