gpt4 book ai didi

language-design - 扩展Backus–Naur形式的操作顺序

转载 作者:行者123 更新时间:2023-12-04 17:02:57 24 4
gpt4 key购买 nike

我正在为一种非常简单的规则语言创建一个正式规范。
我想使用EBNF,因为这是一个标准,但是我不知道如何指定操作顺序。这是到目前为止的规范。

rule = statement, { (‘AND’|’OR’), statement};

variable = ‘$’,alphabetic character, {alphabetic character | digit};

statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;

number = [ "-" ] , digit , { digit } ;

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;

white space = ? white space characters ? ;

我的问题是如何显示方括号中的内容应该首先进行评估。
所以这样的事情
$strap AND ($greenSticker count > 5 OR ($greenSticker AND $redSticker))

对于大多数语言来说,这似乎是一个共同的功能,但是我的Google技能使我感到失望,而且我似乎找不到一个示例。

最佳答案

给出以下简化示例LL语法:

expression -> (+|-|ε) term ((+|-) term)*
term -> factor ((*|/) factor)*
factor -> var | number | (expression)

如您所见,优先级较低的运算符( +-)比较高优先级的运算符( */)具有更通用的规则。这一切都与产生正确的解析树有关。但是根据经验,“外部”或更通用的规则具有较低的优先级,这就是为什么将加法和减法运算符放在 term旁边的原因,因为必须进一步推导 term。如果您查看更复杂的语法,您会发现这是极端的,它具有适当的优先级。

关于language-design - 扩展Backus–Naur形式的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9934553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com