Tag: parsing

为什么这个调用默认的构造函数?

struct X { X() { std::cout << "X()\n"; } X(int) { std::cout << "X(int)\n"; } }; const int answer = 42; int main() { X(answer); } 我本来会期望这个打印 X(int) ,因为X(answer); 可以被解释为从int到X ,或者 一无所有,因为X(answer); 可以被解释为variables的声明。 但是, 它打印X() ,我不知道为什么X(answer); 会调用默认的构造函数。 奖励点:我需要改变什么才能获得临时而不是variables声明?

Flex / Lex和Yacc / Bison有什么区别?

Flex&Lex和Yacc&Bison有什么区别? 我疯狂地search了互联网,我没有find任何可靠的答案。 我可以在Ubuntu上安装纯Lex和Yacc,或者我只能安装flex和bison。 我很困惑。 Lex或Yacc仍然由某人维护? 他们都是免费的吗? 如果Lex不是免费的,我为什么要将它安装在我的Ubuntu发行版上? lex –version lex 2.5.35

如何parsing一个月份的名称(string)为一个整数在C#比较?

我需要能够比较一些数组中的月份名称。 如果有一些直接的方式就好了: Month.toInt("January") > Month.toInt("May") 我的谷歌search似乎build议唯一的办法是写自己的方法,但这似乎是一个普遍的问题,我认为它已经在.Net中实现,任何人做过这之前?

在Pythonstring中分割最后的分隔符?

在string的最后一个分隔符处分割string的build议Python成语是什么? 例: # instead of regular split >> s = "a,b,c,d" >> s.split(",") >> ['a', 'b', 'c', 'd'] # ..split only on last occurrence of ',' in string: >>> s.mysplit(s, -1) >>> ['a,b,c', 'd'] mysplit接受第二个参数,即分隔符的出现。 就像在常规的列表索引中一样, -1意味着从末到尾。 如何才能做到这一点?

在PHP中将stringparsing为布尔值

今天我在玩PHP,发现string值“true”和“false”在一个条件下没有被正确地parsing为布尔值,例如考虑下面的函数: function isBoolean($value) { if ($value) { return true; } else { return false; } } 如果我执行: isBoolean("true") // Returns true isBoolean("") // Returns false isBoolean("false") // Returns true, instead of false isBoolean("asd") // Returns true, instead of false 它似乎只适用于“1”和“0”值: isBoolean("1") // Returns true isBoolean("0") // Returns false 在PHP中有一个本地函数来parsing“true”和“false”string为布尔值吗?

在Java中真正的解决scheme:从2个stringparsing2个数字,然后返回它们的总和

相当愚蠢的问题。 给定代码: public static int sum(String a, String b) /* throws? WHAT? */ { int x = Integer.parseInt(a); // throws NumberFormatException int y = Integer.parseInt(b); // throws NumberFormatException return x + y; } 你能告诉我这个Java是不是很好? 我在说的是, NumberFormatException是一个未经检查的exception。 您不必将其指定为sum()签名的一部分。 此外,据我所知,未检查的exception的想法只是表示程序的实现是不正确的,更重要的是,捕获未检查的exception是一个坏主意,因为它就像在运行时修复坏的程序 。 请有人澄清是否: 我应该指定NumberFormatException作为方法签名的一部分。 我应该定义自己的检查exception( BadDataException ),处理方法内的NumberFormatException并将其重新抛出为BadDataException 。 我应该定义自己的检查exception( BadDataException ),以正则expression式的方式validation两个string,如果不匹配,则抛出BadDataException 。 你的想法? 更新 : 想象一下,这不是一个开源框架,你应该使用一些原因。 你看方法的签名,并认为 – […]

LR,SLR和LALRparsing器有什么区别?

LR,SLR和LALRparsing器的实际区别是什么? 我知道SLR和LALR是LRparsing器的types,但是就parsing表而言,实际的差异是什么? 以及如何显示语法是LR,SLR还是LALR? 对于LL语法,我们只需要显示parsing表中的任何单元格都不应包含多个生产规则。 任何类似LALR,SLR和LR的规则? 例如,我们如何显示语法 S –> Aa | bAc | dc | bda A –> d 是LALR(1)而不是SLR(1)? 编辑(ybungalobill) :我没有得到一个令人满意的答案是什么LALR和LR之间的差异。 所以LALR的表格尺寸较小,但它只能识别LR语法的一个子集。 请有人详细说明LALR和LR之间的区别吗? LALR(1)和LR(1)就足够答案。 他们两个使用1令牌前瞻,并都是表驱动! 他们有什么不同?

是什么让Java比C更容易parsing?

我熟悉C和C ++的语法是上下文敏感的 ,特别是你需要在C中使用“词法分析器”。另一方面,我的印象是,你可以只用Java来parsing尽pipe这两种语言之间有相当的相似性,但它们还是有前瞻性的。 你需要改变一些关于C来使它更容易parsing的东西? 我问,因为所有我看过的关于C语境的例子在技术上是可以允许的,但是很奇怪。 例如, foo (a); 可以用参数a调用void函数foo 。 或者,它可以被声明a footypes的一个对象,但是你可以轻松地摆脱这些缺点。 部分原因是由于C语法的“直接声明者”生成规则实现了声明函数和variables的双重目的,所以出现了这种怪异现象。 另一方面, Java语法对于variables声明和函数声明分别具有生产规则。 如果你写 foo a; 那么你知道这是一个variables声明,而且foo可以毫不含糊地被parsing为一个types名称。 如果foo类没有在当前作用域的某个地方被定义,那么这可能不是有效的代码,但是这是语义分析的一个工作,可以在稍后的编译器中执行。 我已经看到它说C因为typedef很难parsing,但是你也可以在Java中声明你自己的types。 除了direct_declarator之外,哪些C语法规则是错误的?

安全string转换为BigDecimal

我正在尝试从string中读取一些BigDecimal值。 比方说,我有这个string:“1,000,000,000.999999999999999”,我想从它得到一个BigDecimal。 有什么办法呢? 首先,我不喜欢使用stringreplace(replace逗号等)的解决scheme。 我觉得应该有一些整洁的格式化工为我做这个工作。 我已经find了一个DecimalFormatter类,但是当它通过双倍的操作 – 大量的精度丢失。 那么,我该怎么做呢?

为什么Haskell的Prelude.read没有返回一个Maybe?

为什么Prelude.read的types有一个很好的理由 read :: Read a => String -> a 而不是返回一个Maybe值? read :: Read a => String -> Maybe a 由于string可能无法parsingHaskell,后者会不会更自然? 或者甚至是一个Either String a ,其中Left将包含原始string,如果它没有parsing,并且Right的结果,如果它? 编辑: 我不想让别人为我写一个相应的包装。 只是为了保证这样做是安全的。