boost-spirit-lex相关内容
这不会编译(下面的代码). 这里还有另一个问题,也有同样的错误.但我不明白答案.我已经尝试在某些地方插入 qi::eps -- 但没有成功. 我还尝试为所使用的类型添加元函数(boost::spirit::raits::is_container)——但这也无济于事. 我还尝试使用包含我需要在任何地方使用的所有类型的相同变体.同样的问题. 有没有人让这个词法分析器返回除 do
..
我尝试学习使用 boost::spirit.为此,我想创建一些简单的词法分析器,将它们组合起来,然后开始使用精神进行解析.我尝试修改示例,但它没有按预期运行(结果 r 不正确). 这是词法分析器: #include 命名空间 lex = boost::spirit::lex;模板 struct lexer_identifier : lex::lexer{lexer_identifier()
..
警告;而我试图将代码缩短到最低限度.我仍然需要包括很多内容,以确保提供所需的信息. 此代码,编译文件并运行会导致语法错误; name = simple_name [ qi::_val = qi::_1 ] | qualified_name [ qi::_val = qi::_1 ] ; 与此同时; name = qualified_name
..
我有一个基于spirit :: lex和spirit :: qi构建的简单配置文件解析器.当词法分析器到达模式include "path"时,我希望包含文件的文本.如您所知,spirit :: lexer :: begin()开始扫描过程: // Read file contents into a std::string ... // _first and _last are const
..
我正在编写DSL,并使用Boost Spirit词法分析器标记我的输入.在我的语法中,我想要一个与此类似的规则(其中tok是词法分析器): header_block = tok.name >> ':' >> tok.stringval > ';' >> tok.description >> ':' >> tok.stringval > ';' ; 我不想为语言指定保留
..
我想标记自己的SQL语法扩展.这涉及识别双引号字符串内的转义双引号.例如.在MySQL中,这两个字符串标记是等效的:""""(第二个双引号用作转义符)和'"'.我尝试了不同的方法,但是我仍然坚持如何替换令牌的值. #include namespace lex = boost::spirit::lex; templ
..
这不会编译(下面的代码). 这里还有另一个问题,同样的错误.但是我不明白答案.我已经尝试过将qi :: eps插入位置-但没有成功. 我还尝试为使用的类型添加元函数(boost :: spirit :: raits :: is_container),但这也无济于事. 我还尝试使用相同的变体,其中包含我需要在所有地方使用的所有类型.同样的问题. 有人为词法分析器返回了doub
..
让我们考虑以下代码: #include #include #include #include #include #include #include na
..
我似乎在使用Boost Spirit时遇到了一些精神障碍,这是我无法企及的.我有一个需要处理的相当简单的语法,我想将这些值放入一个结构中,该结构包含std :: map作为其成员之一.配对的密钥名称是预先知道的,因此仅允许使用这些名称.地图中可能有一对多的键,可以按任何顺序排列,每个键的名称都通过qi进行了验证. 例如,语法看起来像这样. test .|*| a
..
以下SQL语法有两个问题: #define BOOST_SPIRIT_QI_DEBUG #include #include #include #include
..
让我们考虑以下代码: #include #include #include #include #include #include #include
..
我想知道是否有一个方法在boost :: spirit :: lex写一个标记值回输入流(可能在编辑后)和再次重新扫描。我基本上找的是一个功能,像由unput()在Flex中提供的。 谢谢! 解决方案 我最终实现了自己的unput()功能,如下所示: struct unputImpl { template
..
我在写一个简单的表达式解析器。它是基于Boost.Spirit.Qi语法基于Boost.Spirit.Lex令牌(Boost版本1.56)构建的。 令牌定义如下: 使用命名空间boost :: spirit; template struct tokens :lex :: lexer { tokens(
..
对不起,如果这是一个新手问题,但我需要知道哪个令牌定义产生一个特定的令牌。当我打印令牌ID,我只是得到一个整数。我需要知道哪个正则表达式生成了此令牌。 编辑: 我如何定义我的令牌: 模板 { public: Tokens(const std :: s
..
我正在编译器,我想提高其性能。我发现大约50%的时间花在解析源文件。由于源文件相当小,我之后做了很多转换,在我看来,它是完美的。 我的解析器是一个Boost Spirit解析器和一个词法分析器(与lexer :: pos_iterator),我有一个中等大小的语法。我把源解析成AST。 我的问题是,我不知道在解析过程中花费的时间最多:AST节点,词法分析器,解析器规则或内存的副本。
..
我卡住了试图以创建callgrind工具的输出Boost.Spirit解析器是的valgrind的一部分。 Callgrind输出特定领域的嵌入式编程语言(DSEL),它可以让你做各种如自定义前pressions合成柜台很酷的东西,但它不是简单的解析。 我已经放了一些样品callgrind输出在 https://开头要点.github.com / ned14 / 5452719#文件的采样cal
..
我想知道如果有一个在升压方式::精神::法写一个令牌值回输入流(可能是编辑后),并再次重新扫描。什么我基本上寻找的是一个功能,例如,通过在Flex的unput()提供。 谢谢! 解决方案 我最终实现我自己的unput()的功能如下: 结构unputImpl { 模板< typename的Iter1T,typename的Iter2T,类型名STRT>
..
我有一个非常简单的路径构造我试图用升压spirit.lex解析。 我们有以下的语法: 标记:= [A-Z] + 路径:=(令牌:路径)| (令牌) 所以,我们只是在谈论这里冒号分隔的小写的ASCII字符串。 我有三个例子“XYZ”,“ABC:XYZ”,“ABC:XYZ:” 前两个应视为有效。第三个,其具有尾随结肠,不应该被视为无效。不幸的是,解析器我承认这三个为有效。语法不应该允许一个
..
我尝试学习使用的boost ::精神。要做到这一点,我想创造一些简单的词法分析,将它们组合起来,然后开始使用精神分析。我试图修改的例子,但预期不运行(结果r是不是真的)。 下面是词法分析器: 的#include<升压/精神/有/ lex_lexertl.hpp>命名空间=法的boost ::精神::法;模板< typename的词法> 结构lexer_identif
..