C 接受带破折号的分数运算的正则表达式

C 接受带破折号的分数运算的正则表达式,c,parsing,lexer,regular-language,C,Parsing,Lexer,Regular Language,我想写一个lexer,它接受形式为“1 | 3”的分数,然后计算它们。 我需要定期做这件事 例如: 输入: 2 | 1+4 | 1*5 | 2-18 | 5 (2 | 1+4 | 1)*5 | 2-18 | 5 输出: 42 | 5 57 | 5 我曾经想过这样的事情: digit [0-9] denominator [1-9] digits {digit}+ denominators {denominator}+ fractional "|"{denominators} s

我想写一个lexer,它接受形式为“1 | 3”的分数,然后计算它们。 我需要定期做这件事

例如:

输入: 2 | 1+4 | 1*5 | 2-18 | 5

(2 | 1+4 | 1)*5 | 2-18 | 5

输出:

42 | 5

57 | 5

我曾经想过这样的事情:

digit [0-9]
denominator [1-9]
digits {digit}+
denominators {denominator}+
fractional "|"{denominators}
sign_opt("+","-")?
plus_op "+"
minus_op "-"
mult_op "*"
div_op "/"
op_bracket "("
cl_bracket ")"
operator {plus_op}|{minus_op}|{div_op}|{mult_op}
number {sign_opt}{digits}{fractional}
operation ({number}{operator}{number}|{operator}{number}?)+

无法识别带有正则表达式的平衡圆括号。但无论如何,正则表达式对于这类工作不是很有用,因为它们只能识别。大多数时候,目标是解析;i、 e.分为多个组成部分。您当然需要解析才能进行计算。