Описание тега boost-spirit-lex

1 ответ

Нечувствительные к регистру ключевые слова с boost::spirit::lex

Есть ли способ распознать конкретные шаблоны без учета регистра? Например, если у меня есть literal_bool = L"True|False"; this->self.add(literal_bool, TokenId_LiteralBool); Как я могу соответствовать true, TRUE, tRuE избегая при этом писать [Tt][…
1 ответ

Как использовать boost::spirit::qi с std::vector<token_type> вместо std::string

В приложении я в основном хочу иметь фазу "предварительного разбора", где я настраиваю поток токенов, прежде чем парсер Q сможет его увидеть. Одним из способов сделать это было бы иметь какой-то "адаптер lexer", который построен из lexer и сам по се…
1 ответ

Как заставить дух qi::as_string работать с повтором?

По какой-то странной причине я не могу получить qi::as_string[] работать с repeat()[], анализ std::string str = { "{ +100S+++ ;\n }" };, Я получаю следующий результат PLUS OR MINUS+ THREE PLUS OR MINUS PARSED FINE ------------------------- Parsing s…
1 ответ

Я не могу получить строковое значение токена

Я пытаюсь реализовать Lexer для небольшого языка программирования с Boost Spirit. Я должен получить значение токена и получить исключение bad_get: прекращение вызова после создания экземпляра 'boost:: bad_get' what (): boost:: bad_get: не удалось по…
14 окт '11 в 08:35
0 ответов

Разбор своеобразного унарного знака минус с помощью Spirit.Lex

Я пытаюсь разобрать язык, где унарный минус отличается от двоичного минуса пробелами, существующими вокруг знака. Ниже приведены некоторые псевдо-правила, определяющие, как знак минус интерпретируется на этом языке: -x // unary x - y // binary x-y /…
28 июн '12 в 00:32
1 ответ

Не могу скомпилировать пример буст-духа word_count_lexer

Я продолжаю изучать библиотеку Boost Spirit и у меня есть проблема с примером, который я не могу скомпилировать. Источник примера вы можете найти здесь: источник место. Также вы можете посмотреть этот код и скомпилировать результат на Coliru #includ…
1 ответ

Не могу скомпилировать буст-дух example4.cpp

Я продолжаю изучать библиотеку Boost Spirit, и у меня есть проблема с примером, которую я не могу скомпилировать. Источник примера вы можете найти здесь: источник место. Также вы можете посмотреть этот код и скомпилировать результат на Coliru. #incl…
1 ответ

Пробел шкипера при использовании Boost.Spirit Qi и Lex

Давайте рассмотрим следующий код: #include &lt;boost/spirit/include/lex_lexertl.hpp&gt; #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;utility&gt; #include &lt;v…
1 ответ

Использование лексерных атрибутов токенов в грамматических правилах с Лексом и Ци из Boost.Spirit

Давайте рассмотрим следующий код: #include &lt;boost/phoenix.hpp&gt; #include &lt;boost/spirit/include/lex_lexertl.hpp&gt; #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;string&gt; #inc…
1 ответ

Сравнение строк с учетом регистра символов Boost::Spirit Token в семантическом действии

У меня есть токенизатор и парсер. синтаксический анализатор имеет специальный тип токена, KEYWORD, для ключевых слов (их ~50). В моем парсере я хочу убедиться, что токены соответствуют моим ожиданиям, поэтому у меня есть правила для каждого из них. …
1 ответ

Ошибка грамматики / лексера Boost.Spirit SQL

У меня две проблемы со следующей грамматикой SQL: #define BOOST_SPIRIT_QI_DEBUG #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;boost/spirit/include/lex_lexertl.hpp&gt; #include &lt;boost/spirit/include/phoenix.hpp&gt; #include &lt;boost/s…
1 ответ

Как реализовать директивы include, используя boost::spirit::lex?

У меня есть простой анализатор конфигурационных файлов, созданный из spirit:: lex и spirit::qi. Когда лексер достигает шаблона include "path" Я хочу, чтобы текст файла был включен. Как вы, возможно, знаете, spirit::lexer::begin() запускает процесс с…
09 май '12 в 22:47
1 ответ

Изменение порядка подчиненных правил внутри правила в boost::spirit грамматике приводит к segfault

Предупреждение; пока я пытался сократить код до минимума. Мне все еще пришлось включить немало, чтобы обеспечить наличие необходимой информации. Этот код компилирует файлы и запускается, что приводит к синтаксической ошибке; name = simple_name [ qi:…
1 ответ

Повысьте:: Дух::Lex; Как мне указать токен "||"?

Так что мой вопрос довольно прост, в моем классе лексера (расширение lex::lexer&lt;T&gt;), У меня есть следующее; this-&gt;self.add ... ("&amp;&amp;", AND_AND) ("||", OR_OR) ... Внутри моего конструктора, который прекрасно компилируется, но запускае…
20 авг '13 в 23:21
1 ответ

Нужна помощь с лексером runtime_error

Я пытаюсь написать синтаксический анализатор Си для модифицированного языка Си. Когда я отменяю комментарий к разделу t_in_op и ниже, я получаю сообщение об ошибке run_time Синтаксическая ошибка: нажмите BEGIN, когда '+' по индексу 1 (или что-то в э…
21 авг '11 в 07:35
1 ответ

Как преобразовать значение токена boost::spirit::lex из iterator_range в строку?

Когда я пытаюсь преобразовать значение токена из iterator_range, лексер терпит неудачу при попытке прочитать следующий токен. Вот структура Tokens, которая содержит определения токенов: (Я не думаю, что это актуально, но я включаю на всякий случай.)…
02 май '12 в 03:38
1 ответ

Как сделать значение токена Boost.Spirit.Lex подстрокой совпадающей последовательности (предпочтительно группой соответствия регулярному выражению)

Я пишу простой анализатор выражений. Он основан на грамматике Boost.Spirit.Qi на основе токенов Boost.Spirit.Lex (Boost в версии 1.56). Токены определены следующим образом: using namespace boost::spirit; template&lt; typename lexer_t &gt; struct tok…
18 фев '16 в 08:37
1 ответ

Повышение духа: как сопоставить любой лексер-токен в ци?

Я хотел бы сопоставить объявление функции C++ со значениями аргументов по умолчанию, но игнорируя эти значения. Например: int myFunction(int a, int b = 5 + 4); Вот (часть) лексер: struct Lexer : boost::spirit::lex::lexer&lt;lexer_type&gt; { Lexer() …
1 ответ

Необработанное исключение, использующее Boost Spirit для разбора грамматики

Я пытаюсь использовать Boost Spirit для разбора следующей грамматики: предложение: существительное глагол предложение предложение предложение соединение: "и" существительное: "птицы", "кошки" глагол "летать" "мяу" Разбор успешен, когда грамматика вк…
1 ответ

Как объединить boost::spirit::lex & boost::spirit::qi?

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