Parsing 表达式的语法。四个优先级别。法律专业(1)

Parsing 表达式的语法。四个优先级别。法律专业(1),parsing,compiler-construction,operators,grammar,ambiguous-grammar,Parsing,Compiler Construction,Operators,Grammar,Ambiguous Grammar,我需要知道如何为表达式创建语法来创建解析器和ast。我有四个优先级别: 1. ** ! 2. * / % & 3. + - ^ | 4. <= >= < > 基本上是因为我先求和。我的语法必须是LL(1)并且是右方递归的,因为我的编译器是自顶向下的 谢谢你的帮助,对不起我的英语 编辑 对不起,我错了,我是说自上而下的语法分析器。我在纸上看到的问题是下一个。例如,我有下一个表达式“7*5+5”,我的BNF遵循的顺序是下一个: * / \

我需要知道如何为表达式创建语法来创建解析器和ast。我有四个优先级别:

1. ** !

2. * / % &

3. + -  ^ |

4. <= >= < >
基本上是因为我先求和。我的语法必须是LL(1)并且是右方递归的,因为我的编译器是自顶向下的

谢谢你的帮助,对不起我的英语

编辑 对不起,我错了,我是说自上而下的语法分析器。我在纸上看到的问题是下一个。例如,我有下一个表达式“7*5+5”,我的BNF遵循的顺序是下一个:

    *  
  /   \  
3      +  
     /   \  
    7     5
以Exp中的Exp为例,取7,随后为Val

转到RExp并继续到RExp3

取“*”,然后返回Exps

我在纸上看到的那棵树是下一棵:

    *  
  /   \  
3      +  
     /   \  
    7     5
我应该拥有的那棵树是下一棵:

     +
   /   \
  *    5
 / \
7   5 

你说
btdown
。我不明白解析器如何成为
自下而上的解析器。我知道自上而下和自下而上。是这两个人中的一个吗?e、 你能不能在纸上详细说明你为什么弄错了,或者解释一下你哪里弄错了。快速看一眼,我觉得你的BNF没有问题。我同意,在第一次学习时,首先在纸上完成这些操作是一个很好的开始方式。有趣的是:我添加了一个答案来复制树。如果您使用与其他人相同的非终端名称,这会容易得多,甚至是非常明显的:
术语、因子、主要,
。如果你仔细看看现有的大量表达式语法中的任何一个,从Algo-60开始。。。现在已经57岁了。你说
btdown
。我不明白解析器如何成为
自下而上的解析器。我知道自上而下和自下而上。是这两个人中的一个吗?e、 你能不能在纸上详细说明你为什么弄错了,或者解释一下你哪里弄错了。快速看一眼,我觉得你的BNF没有问题。我同意,在第一次学习时,首先在纸上完成这些操作是一个很好的开始方式。有趣的是:我添加了一个答案来复制树。如果您使用与其他人相同的非终端名称,这会容易得多,甚至是非常明显的:
术语、因子、主要,
。如果你仔细看看现有的大量表达式语法中的任何一个,从Algo-60开始。。。现在已经57岁了。
     +
   /   \
  *    5
 / \
7   5