问题标签 [bnf]
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.
regex - 为文本编辑器定义语法的最佳方法是什么?
我正在为 Mac 编写一个开源文本编辑器,终于达到了我想要添加语法高亮的地步。在过去的几天里,我一直在反复讨论各种解决方案,最后我决定向更广泛的受众开放这个问题。
以下是我看到的选项:
- 基本上用一系列正则表达式模式匹配来定义语言(类似于 TextMate 定义其语言的方式)
- 使用BNF 或 PEG 等形式语法定义语言
使用正则表达式模式匹配似乎不太理想,因为它不能像正式语法一样正式地表示一种语言;然而,一些不太正式的语言将很难适应 BNF(即 Markdown——尽管我知道有一个很棒的PEG 实现)。
实时语法突出显示的性能权衡是什么?多种语言的灵活性如何?
如果我走 BNF 路线,Todd Ditchendorf 创建了很棒的ParseKit框架,它可以很好地开箱即用。有人知道PEG有什么类似的吗?
yacc - BNF:输入错误的非终结符
我正在为国际象棋代数符号开发 BNF,并遇到了一个有趣的案例,输入到错误的非终端。
我的开始 BNF 规则如下(请注意,这故意不包括 castling 或 notes):
piece
, start_position
, capture
, 和promotion
可以为空,因此允许像 'd4' 这样的移动。问题是,当输入这样的移动时,输入 ('d4') 被 采用start_position
,从而导致错误 b/c 没有更多的输入end_position
,不能为空。
显而易见的破解/解决方法是允许end_position
为空,然后检查我们是否有任何输入并采取相应的行动。
这确实有效,但我想知道是否有办法解决这个问题。如果导致整个表达式不匹配,输入是否可能不转到第一个匹配符号?
另一个问题是这是否是 BNF 的标准行为,还是我正在使用的 yaccer 的问题:PLY v 3.3。
尝试使用 flex/bison 并得到了同样的结果。所以它似乎并不特定于 PLY。
以下是完整性的所有相关规则:
grammar - 考虑以下 BNF 语法
考虑以下 BNF 语法(其中非终结符用尖括号括起来并<identifier>
匹配任何合法的 Java 变量标识符)。
为以下表达式生成推导三:
盯着exp:
用术语替换 exp:
将术语替换为:
用因子替换术语:
用 (exp) 替换这两个因子:
用 exp - term 替换第一个 exp,用 exp + term 替换第二个
用术语替换两个 exp,然后用因子替换所有 4 个术语。
用标识符替换所有因素
这够了吗?
parsing - Unix 命令行选项的语法
这是一个家庭作业问题。我想为 Unix 命令行选项编写一个简单的解析器。
首先,我想用 BNF 定义一个语法。
(这里的“任何字符”是任何字母数字字符)。
是否有意义 ?下一个问题是如何添加“旧”Unix 选项,这些选项以单个连字符开头并且可以组合在一起(例如ls -lht
)
xml - sphinx4 使用什么方法来构建它的语法?
使用什么方法sphinx4
来构建它的语法?XML
或增强BNF
?
parsing - 你能修改这个 BNF 语法以始终包含奇数个狗吗?
你能修改这个 BNF 语法以始终包含奇数个狗吗?
“宠物”的例子:
不是“宠物”的例子:
bnf - 空字符串作为 BNF 递归中的基本情况?
我正在写一个小语法作为课堂练习,我的教授并没有真正了解什么是合法的 BNF 表达式。
BNF语法应该可以识别这种形式的字符串:AB,AABB,AAABBB,A...B...(一般形式:AnBn)
所以,我开始写:
我的简单是/否问题是这在 BNF 中是否合法,如果不合法,为什么?
<...> 代表一个非终端,我不知道这是约定还是不是
parsing - 判断 BNF 语法是否模棱两可的最简单方法是什么?
也就是说,是否有一种工具可以自动显示给定语法的完整语言,包括突出显示歧义(如果有的话)?