一、素短语用比较优先级吗?
素短语用比较优先级。
优先级(priority)是一种约定,优先级高的先做,优先级低的后做。优先级是计算机分时操作系统在处理多个作业程序时,决定各个作业程序接受系统资源的优先等级的参数。
二、derivation编译原理?
首先把变量声明语句的规则,用形式化的方法表达一下。
它的左边是一个非终结符(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。