Ich schreibe eine einfache Grammatik für logischen Ausdruck in Flex und Bison. Der Ausdruck ist ein Postfix-Ausdruck. Das ist mein YACC-Code.Logischer Ausdruck Grammatik in Flex und Bison
float_logic_expr:
float_logic_expr
| float_logic_exprs
;
float_logic_exprs:
float_reln_expr
| float_reln_expr float_reln_expr PP_AND
| float_reln_expr float_reln_expr PP_OR
;
string_logic_expr:
string_reln_expr
| string_reln_expr string_reln_expr PP_AND
| string_reln_expr string_reln_expr PP_OR
;
Die obige Regel funktioniert gut für die folgende Aussage.
if #a 40 > #b 20 == && then
Aber wenn ich dem logischen Ausdruck eine weitere Bedingung gebe, schlägt es fehl.
if #a 40 > #b 20 == && #b 30 == && then
Parse-Fehler.
Wie soll ich die Grammatik ändern, um für mehrere relationale Ausdrücke zu arbeiten?
VG. Ich würde sagen, dass AND und OR auf der Ebene oberhalb der Eingabe (float/string) erscheinen sollten. Andernfalls können Sie keine Float-Ausdrücke mit String-Ausdrücken kombinieren. – EJP
@ejp: Ich empfehle normalerweise gegen typisierte Syntax, aber ich war müde, also habe ich es kurz gemacht. Du hast natürlich Recht. Ich könnte am Morgen umschreiben. – rici