语录网短语说说 编译原理的素短语,素短语用比较优先级吗?

编译原理的素短语,素短语用比较优先级吗?

素短语用比较优先级。

优先级(priority)是一种约定,优先级高的先做,优先级低的后做。优先级是计算机分时操作系统在处理多个作业程序时,决定各个作业程序接受系统资源的优先等级的参数。

首先把变量声明语句的规则,用形式化的方法表达一下。

它的左边是一个非终结符(Non-terminal)。

右边是它的产生式(Production Rule)。

在语法解析的过程中,左边会被右边替代。

如果替代之后还有非终结符,那么继续这个替代过程,直到最后全部都是终结符(Terminal),也就是 Token。

只有终结符才可以成为 AST 的叶子节点。

这个过程,也叫做推导(Derivation)过程。

intDeclaration : Int Identifier (’=’ additiveExpression)?;

上面的文法翻译成程序语句,代码如下

SimpleASTNode node = null;

Token token = tokens.peek();// 预读

if (token != null && token.getType() == TokenType.Int) { // 匹配 Int

token = tokens.read();// 消耗掉 int

if (tokens.peek().getType() == TokenType.Identifier) { // 匹配标识符

token = tokens.read();// 消耗掉标识符

// 创建当前节点,并把变量名记到 AST 节点的文本值中,

// 这里新建一个变量子节点也是可以的

node = new SimpleASTNode(ASTNodeType.IntDeclaration, token.getText());

token = tokens.peek();// 预读

if (token != null && token.getType() == TokenType.Assignment) {

tokens.read();// 消耗掉等号

SimpleASTNode child = additive(tokens);// 匹配一个表达式

if (child == null) {

throw new Exception("inval

如果给出短语等名词的形式化的定义,便较难理解,不好求。

我们通过构造语法树来求解。

首先你应该会根据文法将所给句型构造成语法树的形式,即根据文法怎样推导出句型E+T*F。

如果你有数据结构二叉树基础的话这很简单就构造出来了。

构造出语法树后,求短语看根节点,有T,和E。

则短语为:E+T*F,T*F,而直接短语是指能直接推出叶子节点的根所对应的短语,可知该节点为T,直接短语为:T*F。

句柄是最左直接短语,可知为:T*F。

本文来自网络,不代表语录网立场,转载请注明出处:https://www.chinansn.com/article-1-k20220901005207e631sg-0.html