我经常听到C++是一种上下文敏感语言的说法.请看以下示例:
a b(c);
Run Code Online (Sandbox Code Playgroud)
这是变量定义还是函数声明?这取决于符号的含义c.如果c是变量,则a b(c);定义名为btype 的变量a.它是直接初始化的c.但是如果c是一个类型,则a b(c);声明一个名为a的函数b,c并返回一个a.
如果您查找无上下文语言的定义,它基本上会告诉您所有语法规则必须具有仅由一个非终端符号组成的左侧.另一方面,上下文敏感语法允许左侧的任意字符串的终端和非终端符号.
浏览"C++编程语言"的附录A,除了左侧的单个非终端符号之外,我找不到单个语法规则.这意味着C++是无上下文的.(当然,在无上下文语言形成上下文敏感语言的子集的意义上,每种无上下文语言也都是上下文敏感的,但这不是重点.)
那么,C++是无上下文还是上下文敏感?
c++ syntax grammar context-free-grammar context-sensitive-grammar
ancestor::foo[bar[@attr="val"]]
我认为这会奏效,但事实并非如此.我需要foo在树中找到最近的元素bar,该元素具有子元素,而子元素的attr属性为val.
换句话说,我有一个字符串:
"任何东西,逃脱双引号:\",是的,"这里的任何东西都不能匹配.
如何匹配引号内的所有内容?
我在想
^"((?<!\\)[^"]+)"
但我的头脑旋转,应该是积极的还是消极的看法?或者它是否有效?
如何匹配任何字符,除了双引号之外没有反斜杠?
较旧的mysql扩展有CLIENT_FOUND_ROWS连接标志,但我找不到mysqli的任何等价物.
我有一个update查询,想知道它的where子句匹配了多少行,而不是实际更改了多少行(如图所示mysqli -> affected_rows).
到目前为止我唯一想到的方法是用正则表达式解析mysqli -> info(看起来像Rows matched: 40 Changed: 40 Warnings: 0).但这看起来很糟糕.
一个非常有趣的会议是关于D-Specific设计模式的,在D社区中,有些人认为它可能是一本关于有效编码技术的书的起点.其他人认为现在为时尚早,因为没有多少人有很多经验,这样一本书的作者会对有效性的概念有一些偏见/个人欣赏.SO是一种更具互动性的媒体(有其局限性).因此,等待'Effective D'出来,如果我们可以分享一些(查杀)建议/技术/模式以使D代码看起来更好,那将是很好的.我认为如果答案会更清楚:
我正在寻找C或D的现有实现,或者实现具有浮点语义的实现,有符号和/或无符号整数类型的建议.
也就是说,这表现为浮点类型整型运算做什么时候:溢出产生无穷大(-infinity的签署下溢),而不是缠绕或具有不确定的行为,不确定的操作产生的NaN等
本质上是一个浮点版本,其中可呈现数字的分布均匀地落在数字线上,而不是在0附近聚合.
此外,所有操作都应该是确定性的 ; 任何给定的二进制补码32位架构应该为相同的计算产生完全相同的结果,无论其实现如何(而浮点可能,并且通常会产生稍微不同的结果).
最后,性能是一个问题,让我担心潜在的"bignum"(任意精度)解决方案.
另请参见:定点和饱和算术.
我有一个宽度和高度的网格,其中每个单元格可以有三个可能的值(在此图中显示为白色,绿色和红色):
插图http://corexii.com/grid-algorithm-problem-2.png
您可以选择任意数量的绿色单元格(下图中标记为蓝色),其中覆盖所选单元格周围预定方形半径(此处为2)的所有红色单元格(标记为黄色):
插图http://corexii.com/grid-algorithm-problem-3.png
目标是:
任何人对算法都有任何想法?
我正在研究很多理论,但我最感兴趣的是近似快速而非准确地做到这一点.快速,合理的结果比整天计算最佳结果更可取.
(上面的插图可能会显示这些单元格的最正态分布,但不应假设它们类似于所有可能的分布.)
如何检测D中的整数溢出?(检查携带标志?)
原始示例:
ubyte a = 100;
ubyte b = 200;
ubyte c = a + b;
// c can't represent 300; how to detect the overflow now?
Run Code Online (Sandbox Code Playgroud)
修改后的例子:
uint a = 2_000_000_000;
uint b = 3_000_000_000;
uint c = a + b;
// c can't represent 5_000_000_000; how to detect the overflow now?
Run Code Online (Sandbox Code Playgroud)
还有乘法和前/后增量.
我们需要能够将包含cfmail的电子邮件发送到包含a具有急性拉丁语的拉丁语的电子邮件地址.我假设我们最终还必须允许其他Unicode字符 - 示例电子邮件地址是foobár@example.com.ColdFusion在此电子邮件地址上引发错误,这在技术上是有效的.由于急性a是UTF-8字符,并且cfmail的默认编码是UTF-8,我不确定我需要启用哪些其他设置才能使其工作.这可能吗?
我得到的错误是标签CFMAIL的属性验证错误.
详细信息:属性的值(当前为foobár@example.com)无效.