问题标签 [grammar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - Objective-C 中的保留关键字?
在昨天的 CocoaHeads Öresund 会议上,peylow构建了一个很棒的 ObjC 测验。比赛非常激烈,在最后一个问题要评估时,三个人得到了相同的分数:Objective-C 在 C 中添加了多少保留关键字?
随后进行了激烈的辩论。所有人都同意@interface
,@implementation
等等都是预处理器指令而不是关键字,但是像这样的东西in
呢?它可能是关键字,但不是保留关键字。例如,以下将编译没有错误或警告:
我们得出结论,ObjC没有为 C 添加保留关键字,并且有人赢得了一本看似来之不易的书。
但是今天我通过尝试这样的事情尝试了对编译器的一些更系统的滥用:
编译得很好,并且相同的代码可以将 self 替换为BOOL, bycopy, inout, oneway, byref, SEL,
and IMP
。
使用id
变量名,第一行和最后一行编译,但不是第二行。Protocol
和 也是如此Class
。
使用super
,第一行编译,但不是第二和第三行。
使用YES
、NO
和NULL
,所有三行都无法编译,可能是因为它们刚刚定义为true
、false
和nil
。
在我看来,这其中很多是 gcc 变得混乱,我不太确定它反映了什么是和不是 Objective-C 中的保留关键字。例如,为什么可以self
用作 int 的名称,但不能super
?
第一个赋值总是有效的事实(除了 YES、NO 和 NULL)似乎支持这样一种观点,即没有一个候选是在 C 中找不到的技术保留关键字。或者?
有人可以对这个棘手的问题给我们一个权威的解释吗?
几个人的荣誉岌岌可危。
编辑:正如 Nikolai Ruhe 指出的那样,我们需要对“关键字”进行明确定义才能继续进行。Niko 引用了 Wikipedia 的一篇文章,称关键字是“具有特定含义的单词或标识符”。
我认为使用同一篇文章中的这个定义是合理的:
在许多语言中,例如 C 和类似的环境(如 C++),关键字是标识句法形式的保留字。控制流结构中使用的词,例如 if、then 和 else 是关键字。在这些语言中,关键字也不能用作变量或函数的名称。
此外,正如文章所述:
通常,当程序员尝试对变量或函数名使用关键字时,会触发编译错误。
那么,从这个意义上说,是否有任何保留关键字在语言的正式规范中预定义并且不能用作用户定义的名称?
python - Pyparsing 中的关键字匹配:令牌的非贪婪 slurping
蟒蛇爱好者:
假设您想使用 Pyparsing 解析以下字符串:
wereABC_123
是一个标识符;SPEED_X
是一个参数,123
是一个值。我想到了使用 Pyparsing 的以下 BNF:
如果我从中间删除下划线(并Entry
相应地调整定义)它会正确解析。
我怎样才能让这个解析器变得更懒一点,然后等到它与关键字匹配(而不是将整个字符串作为标识符并等待_
不存在的 .
谢谢你。
[注意:这是对我的问题的完全重写;我还没有意识到真正的问题是什么]
ruby - 帮助在 Ruby 中实现 CLI 的库?
我正在尝试在 Ruby 中实现 CLI 类型的应用程序。
CLI 应该接受使用我希望定义的语法的命令。我找到了一些关于如何实现和解析语法(RParsec)的线索,但我不知道如何将它与一些代码挂钩以准确执行命令。
命令类似于(非常粗略的想法,我在大学语言课程之外有语法经验):
“创建 50 个属性 foo 等于 'abc' 的小部件” “更新属性 foo 等于 'abc' 的所有小部件,因此属性 baz 是 'xyz'”
如果有人能指出我正确的方向,我将不胜感激。谢谢。
grammar - 语法句法和语言学
我真的需要以一种可以被机器翻译并且严格基于规则(没有统计数据)的方式描述英语句子结构,它不一定是上下文无关的语法,但这会更好(因为它不能完全描述它)。我找到的最好的是 BNF,但它真的很基本。我需要一些没有例外的东西,除非是模棱两可的。有链接吗?
php - 这个语法不是LR(1)吗?
我正在为 PHP 开发解析生成器。目前我正在尝试实现规范的 LR(1) 解析器,但它在以下语法上输出 reduce-reduce 冲突。这个语法不是LR(1)吗?还是我应该重新检查我的算法?
Bison(-like) 表示法的语法:
编辑:
计算表:
和冲突:
php - PHP_ParserGenerator - 语法或解析器生成器中的错误?
我正在尝试使用柠檬端口为 PHP创建一个简单语言的解析器,它几乎可以工作。
以下语法:
应该解析输入,如:
- '如果 $cond1,!$cond2,$cond3() $var = $this($a(),$inst1 = $b())'
- '$var'
- '% 规则名 $var'
虽然像 1 和 2 这样的输入按预期工作,但不知何故,我无法理解如何输入 3 返回 string(8)“rulename”。我不知道应该进行哪些削减才能实现这一目标。是语法有问题,还是我应该开始调试 PHP_ParserGenerator 本身?
谢谢
computer-science - 学习计算模型的好资源?
出于好奇,我试图确定我使用的系统的计算模型在功能上等效,并证明等效性。我在这个问题上花费的时间越长,我就越怀疑这个系统不是图灵等效的。我对图灵机和递归可枚举语言的理解很好,但我对功能较少的自动机(例如下推自动机)了解不多,所以我不知道如何进行。
首先,任何人都可以推荐一个好的资源来学习不同的计算模型吗?我对语法、语言和自动机,以及如何证明它们之间的等价和差异感兴趣。理想情况下,资源会非常详细地分解每个模型的所有元素并进行比较。
其次,在尝试将系统拟合到任何这些计算模型时,是否应该使用通用方法或框架?
parsing - LALR(1) 函数的空参数列表
我有一个简单的 LALR(1) 语法,但我遇到了问题。
点标记规则的结束,括号之间的终端具有关联性:ASSIGN 是右关联的,COMMA 是左关联的。
但是柠檬说它不能减少规则“empty_stmt_list ::=”。因为它没有连接到开始符号。我敢打赌 :-)
“invoke”也存在解析冲突,当empty_stmt_list确实是一个empy语句列表时,它无法在RPAREN和COMMA之间做出决定。
我想要实现的是能够解析没有(void)参数的函数调用。
其他一切都按预期工作。
谢谢
编辑:我已经编辑了我的原始帖子并发布了整个精简的语法。
parsing - 我如何告诉 Bison 我也期望减少减少冲突?
我的 C#-ish 玩具语法现在有了它的第一个 reduce-reduce 冲突!我为我感到骄傲。
然而,这对我来说似乎没问题(我为此关闭了 GLR 解析器)。问题是,虽然我知道该%expect
指令可以关闭 Bison 关于移位/减少冲突的信息,但我找不到减少/减少冲突的等价物。那么我应该用什么来让它对我的 3 班次/减少和我的 2 次减少/减少保持沉默?