Questions tagged «grammar»


10
仅仅为了解决非关键性的错字就值得做出承诺吗?
如果我在代码中遇到了非关键性的拼写错误(例如,print(error)语句中出现了错误的撇号),是否值得做出承诺来解决该错误,还是应该将其单独放置? 具体来说,我很好奇如何权衡提交日志的解决方案与解决这些非关键错别字的价值。我倾向于解决它们。我是在学脚吗?

5
“无上下文语法”在术语“无上下文语法”中是什么意思?
鉴于试图解释什么是上下文无关文法(CFG)的材料数量众多,我发现令人惊讶的是,很少有人(在我的示例中,少于20个样本中有1份)对为何将这种语法称为“上下文文法”进行了解释。自由”。而且,在我看来,没有人能成功做到这一点。 我的问题是,为什么无上下文语法称为无上下文语法?什么是“上下文”?我有一种直觉,即上下文可以是围绕当前分析的构造的其他语言构造,但事实并非如此。谁能提供准确的解释?

7
为什么在C ++中必须在类外部分别定义静态数据成员(与Java不同)?
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; 我看不到需要A::x在.cpp文件(或用于模板的同一文件)中分别定义。为什么不能同时A::x声明和定义? 是否出于历史原因被禁止使用? 我的主要问题是,如果static同时声明/定义数据成员(与Java相同)会影响任何功能吗?

12
为什么大多数编程语言都具有用于声明函数的特殊关键字或语法?[关闭]
大多数编程语言(动态和静态类型的语言)都具有特殊的关键字和/或语法,这些关键字和/或语法与用于函数声明的变量大不相同。我认为函数就像声明另一个命名实体一样: 例如在Python中: x = 2 y = addOne(x) def addOne(number): return number + 1 为什么不: x = 2 y = addOne(x) addOne = (number) => return number + 1 同样,使用Java之类的语言: int x = 2; int y = addOne(x); int addOne(int x) { return x + 1; } 为什么不: int x …

9
您对代码注释中的句点/句号有何看法?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我在SO Tavern中看到了这个问题,所以我在这里发布问题。我认为这是一个有趣的问题。(当然,它不属于SO,但是我认为在这里还可以。) 您是否在代码注释中添加了句点(或者,正如OP所写,“句号”)? 为了保持相关性,为什么?

4
如何从句子中提取单词并确定每个词是什么?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 6年前关闭。 我想写一些东西,用一个句子,识别其中包含的每个单词,并定义每个单词的词性。 例如 世界您好,我是一个句子 会返回这个 verb noun, pronoun verb adjective noun 理想情况下,我希望最终将其进一步发展并采用一个句子,并以编程方式让它理解它试图解释的内容并可能对此进行处理。 所以我的问题是,有人听说过这样的事情吗?

6
是说“ JSON对象”多余吗?
如果JSON代表JavaScript对象表示法,那么当您说JSON对象时,您不是真的在说“ JavaScript对象表示法对象”吗? 说“ JSON字符串”会更正确吗? 还是简单地说JSON更正确?(如“这两个服务在它们之间传递JSON”中所述。)

3
面向对象编程:为什么要“面向对象”?
我大部分时间都在学习游戏编程学位。这不是计算机科学学位,因此避开了许多理论,以建立实用的档案袋以及我认为的JIT学习,这显然在游戏行业中更为重要。第一个主题是“面向对象编程简介”。 直到我了解了不同的编程范例(我从https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms获得此列表)后,该短语才使我感到困扰: 势在必行 功能性 程序 结构化的 事件驱动 面向对象 陈述式 基于自动机 我知道这并不是一个详尽无遗的清单,并不是所有这些概念都是平等的,而且它们中的大多数甚至都不是排他性的,但是我不明白为什么其中大多数只用一个词-必要;功能 声明-但是当我们谈论使用对象编程中,我们必须澄清,我们面向围绕这些对象。我们不能只使用对象吗?我们就不能有对象吗?他们为什么要把我们定位为我们的指导明星? 在这里(https://en.wikipedia.org/wiki/Object-iented_programming),无处使用“定向”一词作为自己的术语。仅解释“对象”。 另外,出于实际原因,我可以看到使用事件驱动的原因,因为事件编程已经是您在运行会议时要做的事情,而自动机编程听起来就像您正在建立机器人生产线,因此,在此处添加其他澄清词会有所帮助。 是什么使“对象编程”作为一个短语不足以描述我们在编程中使用对象时所做的事情? 显然,从我的语气来看,我不太喜欢“面向”一词。这让我想起了我当法院记者的经历,是在律师使用“与……有关”这一短语作为一种口头记号之后,听听律师的话。没什么意思 这只是他们在尝试思考接下来要说的内容时常使用的术语。但是,我并不是要提倡改变语言,我只是在问为什么是这样。如果有人知道为什么纯粹出于历史,遗迹原因而被人们以这种方式知道,那就是答案。如果我决定浪费时间主张改变语言,那将是弹药。 另一方面,如果实际上有一种有用的原因,为什么某种语言或一段代码必须指向对象,而将所有其他方向都排除在外,而不是仅仅将它们作为工具放在工具带中,那我真的会有兴趣了解它。我喜欢学习有用的东西。

3
语法和语法有什么区别?
我了解语法和语义之间的区别- 语法:如何将符号组合以形成有效的表达式或语句。 语义:构成表达式或陈述的那些符号的含义。 但是语法是什么?例如:有时我听到人们说某些结构“在语法上是不正确的,但在语法上是正确的”。这是什么意思?

1
根据语法编写词法分析器时应遵循的步骤是什么?
在阅读有关语法,词法分析器和语法分析器的澄清问题的答案时,答案指出: BNF语法包含词法分析和解析所需的所有规则。 这对我来说有点奇怪,因为直到现在,我一直认为词法分析器根本不基于语法,而解析器则很大程度上基于语法。在阅读了许多有关编写词法分析器的博客文章之后,我得出了这个结论,而从来没有人使用1 EBNF / BNF作为设计基础。 如果词法分析器以及解析器都基于EBNF / BNF语法,那么如何使用该方法创建词法分析器呢?也就是说,如何使用给定的EBNF / BNF语法构造词法分析器? 我见过很多,很多的职位,应对写的用EBNF / BNF作为指导或蓝图解析器,但我已经遇到没有到目前为止,显示与词法分析器的设计相当。 例如,采用以下语法: input = digit| string ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; string = '"', { all characters - '"' …

3
如何为解析器指定语法?
我已经进行了很多年的编程,但是仍然需要花费我很长时间的一项任务是为解析器指定语法,即使付出了如此多的努力,我也永远无法确定我想出的语法是否很好(以任何合理的方式衡量“良好”)。 我不希望有一种算法可以自动执行指定语法的过程,但是我希望有一些结构化问题的方法可以消除当前方法的大部分猜测和反复试验。 我的第一个念头是阅读解析器,而我已经做了一些,但是我在该主题上阅读的所有内容都将语法视为既定的(或者琐碎到可以通过检查指定的语法),并专注于将这个语法翻译成解析器的问题。我对之前的问题很感兴趣:首先如何指定语法。 我主要对指定一个正式代表具体示例(正例和负例)的语法的问题感兴趣。这与设计新语法的问题不同。感谢Macneil指出了这一区别。 我从来没有真正欣赏过语法和语法之间的区别,但是现在我开始明白它了,我可以通过说我主要对指定语法来强制执行一个语法的问题来加强我的第一说明。预定义的语法:就我而言,这种语法的基础通常是肯定和否定示例的集合。 如何为解析器指定语法?是否有一本书或参考资料是事实上的标准,用于描述最佳实践,设计方法以及有关为解析器指定语法的其他有用信息?在阅读解析器语法时,我应该重点注意什么?

2
Haskell内存效率-哪种方法更好?
我们正在基于修改后的二维语法语法实现矩阵压缩库。现在,我们对数据类型有两种方法-如果使用内存,哪种方法更好?(我们要压缩一些东西;))。 语法包含恰好有4个Productions的NonTerminals或右侧的Terminal。我们将需要Productions的名称来进行相等性检查和语法最小化。 首先: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type for a set of productions type ProductionMap = Map …

2
为什么Forth的灵活性使语法不适合它?
我最近承担了编写基于堆栈的编程语言的任务。但是,在开始设计语言之前,我认为阅读和尝试现有的基于堆栈的语言是一个好主意。 这把我带到了这篇文章的主题。我正在阅读有关Forth的Wikipedia文章,Forth是一种使用后缀样式表达式的基于堆栈的语言。在文章中,我看到了以下语句: Forth的灵活性使静态BNF语法不合适,并且它没有整体编译器。扩展编译器只需要写一个新词,而不需要修改语法和更改基础实现。 据我了解,在Forth术语中,“单词”一词基本上与“子例程”同义。鉴于此,上述说法似乎很奇怪。为什么在Forth中创建新功能的能力会导致Forth的正式语法不合适?为什么需要为定义的每个新子例程重新编写语法?在环境中写一个新单词如何构成扩展编译器?上面的陈述似乎类似于说正式语法不适合Python,因为您可以定义新函数。 实际上,我决定尝试为下面的Forth的一个简单子集编写BNF样式语法: program ::= stmt+ stmt ::= func | expr func ::= ':' expr+ ';' expr ::= INTEGER | word word ::= ('+' | '-' | '*' | '/' ) 上面的语法似乎涵盖了Forth语句的有效子集,并且似乎很难扩展到涵盖Forth语言中的所有有效语句。此外,如果编译器的解析器实现了上述语法,我将看不到如何扩展该编译器。编译器只会在其环境中添加任何新词。仅环境被更改。似乎以上来自Wikipedia的摘录似乎正在将构成编译器(不会更改)的下划线代码与编译器的环境(确实会更改)进行混合。 总而言之,为什么福斯(Forth)定义新词(子例程)的敏捷性不适合书面语法?

3
在标识符中使用“ ys”代替“ ies”以简化查找和替换功能是否有意义?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 尽管在语法上不正确,但是在编写函数,变量等的标识符时,是否将“ s”简单地附加到以Y结尾的复数单词是否有意义?我这样做的原因是,如果您需要查找和替换,例如,用“供应商”替换“公司”,则“公司”将匹配单数和复数形式(“ company”和“ company s”),而如果复数的拼写正确,则必须进行两次单独的搜索。
9 grammar 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.