首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件-解析语法SableCC

条件-解析语法SableCC
EN

Stack Overflow用户
提问于 2017-05-16 19:06:31
回答 1查看 201关注 0票数 0

我正在使用sableCC,我试图构建一个接受条件的语法,比如在C.However中,当我试图在我的条件上添加括号时,我会出错,因为表达式中的括号与我的括号有冲突。它接受4=3或x= 95 mod 5和5=5,但是没有任何parentheses.Also,我觉得' not‘语法规则是不正确的。

代码语言:javascript
复制
Helpers
    tab   = 9;
    cr    = 13;
    lf    = 10;

    sign = '+' | '-';
    digit = ['0'..'9'];

    lowercase = ['a'..'z'];
    uppercase = ['A'..'Z'];
    letter  = lowercase | uppercase;
    idletter = letter | '_';
    idchar  = letter | '_' | digit;

Tokens
    number  = [digit - '0'] digit*;
    id = idletter idchar*;
    plus   = '+';
    minus  = '-';
    times  = '*';
    div = 'div';
    mod = 'mod';

    equal = '=';
    hash = '#';
    greater = '>';
    greateq = '>=';
    less    = '<';
    lesseq  = '<=';
    not = 'not';
    and = 'and';
    or  = 'or';

    lparen = '(';
    rparen = ')';

    eol   = cr | lf | cr lf;
    blank = ' ' | tab;

Ignored Tokens

    eol, blank;

Productions

    program = compare*;

expr = {term} term
      | {add} expr plus term
      | {sub}  expr minus term
      ;
term = {factor} factor
      | {times}  term times factor
      | {div}  term div factor
      | {mod}  term mod factor
      ;
factor = {number} number
       | {id} id
       | {expr} lparen expr rparen
       ;

compare = {cond} cond |
          {gr}compare greater cond |
          {gq}compare greateq cond |
          {ls}compare less cond |
          {lq}compare lesseq cond |
          {eq}compare equal cond |
          {not} not cond
          ;

cond =  {expr} expr |
        {and}  cond and expr |
        {or} cond or expr
        ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 22:05:49

如果您真的打算接受条件“如in C",那么您只需将条件变成另一种形式的expr,因为它们就是这样的:它们是值总是在{0, 1}范围内的表达式。但它们在其他方面并没有什么不同:

代码语言:javascript
复制
a = (x < y) + 3 * (x == z || x < 6);

是一个完全可以接受的表达式(尽管它在C程序中可能并不经常出现)。

因此,如果您只是将最后一个factor产品更改为lparen cond rparen (或者将cond重命名为expr,并找到其他单词来命名您当前所称的expr),那么括号条件的所有问题都将消失。

还有其他一些这样的问题来解决这个问题。以下是几个:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44009631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档