问题标签 [context-sensitive-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.
grammar - 如何处理 BNF 中的大字母?
给定一种定义为的语言:
任何一对匹配的符号都是有效的字符串。
例如
00
,55
,YY
还有一大堆非终结符号(比如说4,294,967,296
它们)......
您将如何定义 BNF 语法来表达该语言?(上下文相关或其他。)
我特别有兴趣了解是否有一种方法可以在不编写4,294,967,296
规则的情况下做到这一点:即一个如此庞大的语法,它失去了用 BNF 定义的所有好处,因为它已成为一组“蛮力”有效文字。
parsing - 上下文相关的标记化是否需要词汇语法中的多个目标符号?
在几种情况下,词汇输入元素的识别对使用输入元素的句法语法上下文很敏感。这需要词汇语法的多个目标符号。
两个这样的符号是InputElementDiv
和InputElementRegExp
。
在 ECMAScript 中, 的含义/
取决于它出现的上下文。根据上下文,a/
可以是除法运算符、正则表达式文字的开头或注释分隔符。词法分析器无法单独区分除法运算符和正则表达式文字,因此它必须依赖来自解析器的上下文信息。
我想了解为什么这需要在词汇语法中使用多个目标符号。我对语言设计知之甚少,所以我不知道这是由于语法的某种形式要求还是只是惯例。
问题
- 为什么不像这样使用单个目标符号:
并让解析器告诉词法分析器使用哪个产生式(DivPunctuator
vs RegExLiteral
),而不是使用哪个目标符号(InputElementDiv
vs InputElementRegExp
)?
还有哪些其他语言在其词汇语法中使用多个目标符号?
我们如何对 ECMAScript 词法文法进行分类?从 CSG 的正式定义的意义上说,它不是上下文敏感的(即,其产生的 LHS 没有被终端和非终端符号的上下文包围)。
computation-theory - a^nb^nc^n 的上下文相关语法
a^nb^nc^n 的以下 CSG 是否正确?
如果不是,请解释为什么?
regex - PCRE 可以匹配所有上下文相关的语言吗?
最近我注意到大多数编程语言的正则表达式引擎并不是形式语言理论意义上的正则表达式的忠实实现。前瞻和后瞻等特性支持上下文无关文法的匹配,这是常规文法的超集。
然而,更有趣的是,许多正则表达式引擎可以匹配某些上下文相关的语言。本文提供了一些示例:https ://www.npopov.com/2012/06/15/The-true-power-of-regular-expressions.html#context-sensitive-grammars
作者质疑 PCRE 是否可以匹配所有上下文相关的语言,而不仅仅是其中的一些。任何人都可以对此有所了解(最好通过正式证明)?