假设我有以下用于简单计算器语言的上下文无关语法:
S->TS'
S'->OP1 TE'|e
T->FT'
T'->OP2 FT'|e
F->id|(S)
OP1->+|-
OP2->*|/
Run Code Online (Sandbox Code Playgroud)
可以看到,* 和 / 的优先级高于 + 和 -。但是,如何添加另一级优先级?例如指数、^、(例如:3^2=9)或其他什么?请解释一下您的程序以及如何到达那里的原因,以便我可以为其他操作员做这件事。
我的语法定义如下:
A -> aA*b | empty_string
Run Code Online (Sandbox Code Playgroud)
是A正则表达式吗?我对如何解释BNF语法感到困惑.
我有一个简单的语法,如
S::=a S b
S::=[] (empty string)
Run Code Online (Sandbox Code Playgroud)
现在我想为上面的语法编写一个解析器
cfg('S', [a,'S',b])
Run Code Online (Sandbox Code Playgroud)
通过最左边的推导产生一个句子aaabbb.
我不够好处理prolog中的dcg/cfg.所以请帮助我这个例子,以便我可以继续尝试更大的东西.
哪些语法不是上下文无关的?请给我一些非上下文无关的例子。
Is this grammar context free?
A->aSb|aaS|aaaS|B
S->aSb|Bb|lambda
B->Bb|lambda
Run Code Online (Sandbox Code Playgroud) 我想承认
"Str","Int","[Str]","[Int]","[[Str]]",...
Run Code Online (Sandbox Code Playgroud)
我以为我可以做点什么
(Str|Int|\[\1\])
Run Code Online (Sandbox Code Playgroud)
其中\1自引用组.我知道,从形式语言理论,正则表达式不能"指望"因此不可能跟踪的开闭[和].
我可能需要一个无上下文语法,我如何在JS中这样做?
我们如何知道以下哪个逻辑运算(或者,而不是)在下面的自由语法中具有更高的优先级?有这种问题的一般方法吗?
X→X或Y | ÿ
Y→Y和Z | ž
Z→不是Z | (X)| 是的| 假
我在互联网上搜索过,大多数人只是说上下文无关语言对于联合、连接、反转和 Kleene Star 是封闭的。它们是否也因设置差异而关闭?
set discrete-mathematics context-free-grammar formal-languages context-free-language
我正在阅读着名的紫龙书第2版,并且无法从第65页获得关于创建FIRST集的示例:
我们有以下语法(终端加粗):
stmt → expr;
| if(expr)stmt
| for(optexpr; optexpr; optexpr)stmt
| 其他optexpr→ε
| EXPR
书中建议以下是FIRST的正确计算:
FIRST(stmt)→{ expr,if,for,other } //就此达成一致
FIRST(expr;)→{ expr } //这是从哪里来的?
正如评论所暗示的那样,第二行来自哪里?
我正在阅读Rebol Wikipedia页面。
“解析表达式是用解析方言编写的,与do方言一样,它是数据交换方言的面向表达式的子语言。与do方言不同,解析方言使用表示运算符和最重要的非终结符的关键字”
你能解释一下什么是terminals和nonterminals?我已经阅读了很多有关语法的内容,但不了解它们的含义。这是另一个经常使用此词的链接。