boost-spirit-x3相关内容
如何防止X3符号解析器匹配部分令牌?在下面的示例中,我要匹配“ foo”,而不是“ foobar”。我尝试将符号解析器扔到 lexeme 指令中,就像使用标识符一样,但是没有匹配项。 #include #include #include #include
..
我在boost :: spirit :: x3中编写了以下递归规则,但它似乎只能在g ++ / clang中编译,而不是在VS2017(15.5.3)中编译: #include #include 命名空间lex3 { 命名空间x3 = boost :: spirit :: x3;
..
是否可以在运行时修改规则的解析器?我能够动态创建解析器(派生自parser_base的类),但是我不知道如何将新的解析器分配给现有规则. 基本上,我的问题是我想为由数字(如在我的所有解析器输入中不变的意义上称它们为常量)和符号(我想要的变体)这样的元素组成的行定义一个解析器使用动态解析器方法捕获).由于这些符号基于运行时的当前环境,因此我认为我需要一个动态解析器. 最小的问题,
..
当期望解析器失败时,如何避免引发异常? 我有一条规则"function" > (!x3::lexeme[keyword >> !(x3::alnum | '_')] >> symbol) > ('(' > -lvalue_list > ')') > statements > "end"来解析如下代码: function a() return one end keyword s是(z
..
我想解析CSS颜色函数(为简单起见,所有参数都是0到255之间的数字) rgb(r,g,b) rgba(r,g,b,a) hsl(h,s,l) hsla(h,s,l,a) 进入 struct color { color(std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a) : red{r}, gree
..
此代码无法编译(gcc 5.3.1 + boost 1.60): #include namespace x3 = boost::spirit::x3; template void parse(T begin, T end) { auto dest = x3::lit('[') >> x3::int_
..
(1)说我们要解析一个由{}包围的简单递归块. { Some text. { { Some more text. } Some Text again. {} } } 此递归解析器非常简单. x3::rule const ruleBlock
..
我正在将手写的解析器迁移到Boost.Spirit(2.5.4).第一印象是积极的,但是由于我使用的是C ++ 17,因此X3似乎是一个非常有吸引力的选择. 幸运的是,有关X3的资源很多: 许多有关Stackoverflow上X3的问题 关于在YouTube上有关X3的视频 一个在线文档 但是: Boost.Org上没有任何内容,给人的印象是,尽管Spirit X3是Bo
..
我想使用Boost.Spirit x3解析递归语法,但是由于模板实例化深度问题而失败. 语法如下: value: int | float | char | tuple int: "int: " int_ float: "float: " real_ char: "char: " char_ tuple: "tuple: [" value* "]" 以下是一个包含的示例:
..
我正在尝试使用Boost 1.65.1中的Spirit X3来创建解析器.我已将问题简化为以下具有更简单结构的较小示例: #include #include #include #inclu
..
我正在和一个朋友一起为一个小型个人项目做口译;我们开始实现所有类和通用结构,在这些类和通用结构中,代码将被翻译然后执行,只是将实际的解析代码推迟到这些结构中. 现在我们必须构建解析器,经过一番搜索,我发现各地到处都是谈论Spirit Qi和Spirit X3的帖子和人们,好像他们(我认为是)两种不同的解析器制作方式一样,但是没有人说这种差异,哪一种是最近的,我应该从哪一种开始. 目的是
..
我正在尝试编写一些在Spirit-X3之上构建的复杂解析器,所以我需要了解一些事情: ♦如何在运行时合并规则. (有纳比亚力克的把戏) ♦返回这样的规则是否可以: x3::rule SomeFunction(std::string &str) { x3::rule foo; auto bar = baz; BOOST_SPIRIT_
..
我正在通过编写解析器来解析NAMS使用的十六进制数的两个变体来学习Boost Spirit: 后缀为0x/0h或前缀为h/x的十六进制数字. 以$为前缀的十六进制数字,并且必须后跟十进制数字. 以下是我到目前为止提出的内容,以及 Coliru会议: //#define BOOST_SPIRIT_X3_DEBUG #include #include
..
我想有效地解析大型CSV格式的文件,这些文件在运行时会获得列的顺序.使用Spirit Qi,我将使用lazy辅助解析器解析每个字段,该辅助解析器将在运行时选择将哪个列特定的解析器应用于每个列.但是X3似乎没有lazy(尽管它是最终效果非常好,但是现在我注意到我真的不需要在自定义解析器本身之外的任何地方公开pos变量.我尝试将其放入自定义解析器本身,并开始出现编译器错误,指出column_value
..
在我相信X3中的错误处理主题还有一些改进的余地.从我的角度来看,一个重要的目标是提供有意义的错误消息.首先,最重要的是添加一个将_pass(ctx)成员设置为false的语义动作不会这样做,因为X3会尝试匹配其他内容.仅抛出x3::expectation_failure会过早退出解析功能,即不尝试匹配其他任何内容.因此,剩下的就是解析器指令expect[a]和解析器operator>以及从语义动作
..
以下用于简单机器人命令语言的Spirit x3语法在Windows Visual Studio 17中生成编译器错误.对于此项目,我需要将警告级别编译为4(/W4),并将警告视为错误(/WX). ). 警告C4127条件表达式为 常量SpiritTest e:\ data \ boost \ boost_1_65_1 \ boost \ spirit \ home \ x3 \ char \
..
Coliru 上的简单解析器.解析器-(+x3::alpha)应该能够像Qi那样传播类型为boost::optional的属性.但是它不能编译. std::string const input = "abc"; boost::optional attr; if(x3::parse(boost::begin(input),boost::end
..
这是我“>上一个问题的后续问题关于boost::spirit::x3和boost::string_view. 虽然我可以解析为std::vector(实时示例),进入std::vector失败,并出现以下编译错误: #include #include #include
..
我正在阅读 Boost X3快速入门教程,并注意到线 eps是一种特殊的精神分析器,它不消耗任何输入,但始终会成功.我们使用它来初始化规则的综合属性,然后将其初始化为零. [...]以这种方式使用eps非常适合进行初始化之前和之后的初始化. 现在,我不禁想知道eps_that_might_fail在解析后的输入的一部分上进行某种语义/后分析是否有用,这可能会失败,使内部具有某种检查的局
..
随着解析器的增长,我将一些规则分为不同的翻译单元(TU),链接器问题随之而来.经过数周的尝试和失败尝试之后,我将约50条规则简化为此处(希望如此)的最小示例.我已经阅读了相关的在使用boost-spirit的单独解析器中链接错误x3 并检查,我在上下文typedef iso8859_1::space_type上使用了该函数,并稍后调用了iso8859_1::space.另外,我也不让编译器推断出i
..