首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于字符串级联的LALR语法

用于字符串级联的LALR语法
EN

Stack Overflow用户
提问于 2013-08-01 13:04:30
回答 1查看 294关注 0票数 1

我一直试图解析连接的字符串,以便也可以将表达式连接起来形成字符串。那是,

代码语言:javascript
运行
复制
"No, " + 4*(6+5)/(8-4) + " is not equal to " + 75*1.3 + "."

以上内容应正确分析。问题是+会导致转移-减少冲突。我一直在使用以下语法;

代码语言:javascript
运行
复制
<S> ::= <A> '+' <S>
      | <A>
<A> ::= <E>
       |QUOT
<E> ::= <T> '+' <E>
      | <T> '-' <E>
      | <T>
<T> ::= <F> '*' <T>
      | <F> '/' <T>
      | <F>
<F> ::= NUM
      | '(' <E> ')'

我还没有成功地找到一种语法,+不会导致移位-减少冲突。我希望有一种方法来使这个语法LALR,我将非常感谢一些帮助,试图找到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 21:39:22

如果:

  1. 您不关心+运算符(添加或连接)如何关联;以及
  2. 您不需要能够在字符串表达式周围使用括号,

那就有个解决办法。我更多地认为这是一次智力练习,而不是一种实际的解决方案,部分原因是上述要求具有高度的限制性,部分原因是我认为你不应该使用相同的操作符,有两个不同的先例。(事实上,我并不是使用+进行连接的主要支持者。它是完全不同的,它应该有自己的象征。)

下面的解决方案很难确保字符串表达式与算术表达式的区别,因为算术表达式要求字符串表达式不能以(开头。为了避免级联的过早减少,它将+的级联版本关联到右侧,而添加版本与左侧的关联保持正常。

代码语言:javascript
运行
复制
S : E '+' A
  | E
  | A
  ;

A : QUOT '+' S
  | QUOT
  ;

E : E '+' T
  | E '-' T
  | T
  ;

T : T '*' F
  | T '/' F
  | F
  ;

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

https://stackoverflow.com/questions/17994873

复制
相关文章

相似问题

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