libclang определяет только 5 типов лексем:libclang: как получить маркер семантика
- CXToken_Punctuation
- CXToken_Keyword
- CXToken_Identifier
- CXToken_Literal
- CXToken_Comment
Можно получить более подробную информацию о жетоны? Например, для следующего исходного кода:
struct Type;
void foo(Type param);
Я бы ожидать, что выход будет как:
- структура - ключевое слово
- Тип - имя типа
- ; - знаки препинания
- пустота - тип/ключевое слово
- Foo - имя функции
- (- пунктуация
- Тип - тип параметра функции
- парам - имя функции параметра
- ) - пунктуация
- ; - пунктуация
Мне также необходимо сопоставить эти объекты с файлами.
Некоторых ссылки на которых вы основываете свои наблюдения о том, как работает Clang будет очень полезен (не претендует вы неправильно, на самом деле я видел большую часть того, что вы говорите, исследуя сам libclang, просто указывая, как образовательные будут иметь некоторые ссылки для поддержки ваших замечаний). – Yannis
Я знаю, как работают парсеры, я реализовал более одного. Я добавлю более подробные сведения к моему вопросу позже. В настоящее время я использую 'clang_annotateTokens', но он возвращает курсоры с неожиданным' CXCursorKind'. – piotrekg2
@ piotrekg2: Если вы действительно знаете, как работают парсеры, почему вы ожидаете, что поток токена * должен иметь не-токенную информацию, такую как «имя функции» и т. Д.? Это информация, основанная на парсерах, а не на основе токенов. –