2010-06-24 3 views
5

Как определить рабочий набор лексера и синтаксического анализатора (пример: gratia: flex и bison) для поддержки строковых литералов C++ 0x?Как реализовать строковый литерал C++ 0x?

Как вы уже знаете, новые строковые литералы в C++ 0x могут быть выражены очень гибким способом.

R"<delim>...<delim>"; - в этом коде <delim> может быть почти всем, и не требуется никаких символов эвакуации.

Любой вид скобок может использоваться для разделения конца строки:

R"(I love those who yearn for the impossible. (Von Goethe, "Faust"))";

блоки текста могут быть просто определены с использованием одинаковых вхождений одинаковых символов:

R";***************************(
    ; TINY BASIC FOR INTEL 8080 
    ;  VERSION 2.0 
    ;  BY LI-CHEN WANG 
    ; MODIFIED AND TRANSLATED 
    ; TO INTEL MNEMONICS 
    ;  BY ROGER RAUSKOLB 
    ;  10 OCTOBER, 1976 
    ;  @COPYLEFT 
    ; ALL WRONGS RESERVED  ) 
    ;***************************"; 

Подробнее информацию можно найти here (wikipedia) и here (att).

Я хотел бы использовать эту фантастическую функцию на языке, который я сейчас разрабатываю.

Итак, как я могу определить правильный токенизатор и синтаксический анализатор для достижения результата?

Заранее благодарим за ответы!

+0

Я думаю, что ваш второй пример не является допустимым сырым литералом, он должен содержать круглые скобки (R "(; *** ..."). – Motti

+0

Нет, нет ... последовательность; *** ... есть разделитель строки, содержимое исходной строки начинается после круглых скобок. – Rizo

+0

Вот пример из википедии: разделитель R "delimiter (The String Data \ Stuff"). – Rizo

ответ

2

Вы можете пропроцитировать литералы на этапе лексического анализа и превратить их в нечто вроде мета-токена.

Input: 
    int a; 
    char *b = R"...."; 

Preprocessed: 
    int a; 
    char *b = R*literal[0]*; 

Tokenized: 
    INT symbol[0] DELIM 
    CHAR OP_ASTR symbol[1] OP_EQ symbol[2] *literal[0]* DELIM 

Symbol table contents { "a", "b", "R" } 

Literal table contents { "...." } 

буквальным [0] является указателем исходного буквального текста.

+0

Вы можете обрабатывать любые нерегулярные, специальные синтаксические конструкции на стадионе лексического анализа g пользовательских подпрограмм. – 9dan

+0

Это своего рода гибридный лексико-грамматический анализ; Кажется, я понял эту идею! Спасибо! – Rizo

Смежные вопросы