gpt4 book ai didi

不使用左手递归解析 bool 表达式

转载 作者:行者123 更新时间:2023-12-02 15:25:16 24 4
gpt4 key购买 nike

我正在尝试匹配这个

f(some_thing) == 'something else'
  • f(some_thing) 是一个函数调用,它是一个表达式
  • == 是 bool 运算符
  • 'something else' 是一个字符串,也是一个表达式

所以 bool 表达式应该是

expression operator expression

问题是我不知道如何在没有左递归的情况下做到这一点这是我的规则

expression 
=
bool_expression
/ function_call
/ string
/ real_number
/ integer
/ identifier

bool_expression
= l:expression space* op:bool_operator space* r:expression
{ return ... }

使用语法符号,我有

O := ==|<=|>=|<|>|!=  // operators
E := B|.... // expression, many non terminals
B := EOE

因为我的语法是 EOE 我不知道如何使用左手算法

A := Ab|B
transforms into
A := BA'
A':= e|bA

其中 e 为空,b 为终端

最佳答案

类似这样的事情应该可以做到:

expression
= bool_expression

bool_expression
= add_expression "==" bool_expression
/ add_expression "!=" bool_expression
/ add_expression

add_expression
= mult_expression "+" add_expression
/ mult_expression "-" add_expression
/ mult_expression

mult_expression
= atom "*" mult_expression
/ atom "/" mult_expression
/ atom

atom
= function_call
/ string
/ real_number
/ integer
/ identifier

function_call
= identifier "(" (expression ("," expression)*)? ")"

string
= "'" [^']* "'"

identifier
= [a-zA-Z_]+

integer
= [0-9]+

real_number
= integer "." integer?
/ "." integer

关于不使用左手递归解析 bool 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15506088/

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