简体   繁体   中英

Exponent operator does not work when no space added? Whats wrong with my grammar

I am trying to write an expression evaluator in which I am trying to add underscore _ as a reserve word which would denote a certain constant value.

Here is my grammar, it successfully parses 5 ^ _ but it fails to parse _^ 5 (without space). It only acts up that way for ^ operator.

COMPILER Formula
CHARACTERS
    digit = '0'..'9'.
    letter = 'A'..'z'.
TOKENS
    number = digit {digit}.
    identifier = letter {letter|digit}.
    self = '_'.
IGNORE '\r' + '\n'

PRODUCTIONS
    Formula = Term{ ( '+' | '-')    Term}.                                              

    Term = Factor {( '*' | "/" |'%' | '^'   ) Factor}.

    Factor = number | Self.

    Self = self.
END Formula.

What am I missing? I am using Coco/R compiler generator.

您当前对令牌letter定义会导致此问题,因为范围A .. z包含_字符和^字符。

You can rewrite the Formula and Term rules like this:

Formula = Formula ( '+' | '-') Term  | Term                                             

Term = Term ( '*' | "/" |'%' | '^'   ) Factor | Factor

eg https://metacpan.org/pod/distribution/Marpa-R2/pod/Marpa_R2.pod#Synopsis

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM