package ravaComplier.syntax.nodes; import ravaComplier.lexer.Lexeme; import ravaComplier.symTable.SymTable; import ravaComplier.symTable.Symbol; import ravaComplier.syntax.GlobalVars; import ravaComplier.syntax.SyntaxTreeGenerator; /* * 该类尝试读入词素并生成id节点 */ public class id { public SymTable curST;//这个节点的符号表 public id() throws Exception { Lexeme lex=SyntaxTreeGenerator.readLexeme();//读一个词素 curST=SyntaxTreeGenerator.getCurTable();//得到当前符号表 if(lex.type==Lexeme.ID) { //类型正确 symEntry=SyntaxTreeGenerator.getCurTable().getSym(lex.value.toString());//判断符号表中是否已有此id if(symEntry==null) { firstappear=true; } else { firstappear=false; } value=lex.value.toString(); symEntry=new Symbol(value,2,null);//生成一个入口 } else { //类型错误抛出异常 throw new Exception("ID required!\r\n"); } GlobalVars.idlist.add(this);//把所有id都添加进idlist里。 } public String value; public boolean firstappear; public type tp;//类型,由调用者赋值 public Symbol symEntry;//指向符号表的条目 }这个类代表id节点,首先尝试读入词素,如果不是id则发生语法错误。其次需要判断此id是否是第一次出现,在某些时候这个信息很重要(比如变量定义时),然后最后将已经初始化好的id添加到GlobalVars的list中。得注意的是,GlobalVars里面有很多的list,主要是用于在生成语法树之后用于一些检查。
(2)vardeclare
来个稍微复杂点的,局部变量的定义
package ravaComplier.syntax.nodes; import java.util.ArrayList; import ravaComplier.lexer.Lexeme; import ravaComplier.symTable.SymTable; import ravaComplier.symTable.Symbol; import ravaComplier.syntax.SyntaxTreeGenerator; public class vardeclare { /* * var-declare --> type args|type[] args * */ public SymTable curST; public vardeclare() throws Exception { curST=SyntaxTreeGenerator.getCurTable(); tp=new type(); int pos=SyntaxTreeGenerator.savePos();//得到当前分析的位置 Lexeme lex=SyntaxTreeGenerator.readLexeme();//读取下一个词素 arrayDeclare=false; if(!lex.value.equals("[")) { SyntaxTreeGenerator.loadPos(pos);//若不是想要的词素则回溯 } else { lex=SyntaxTreeGenerator.readLexeme(); if(!lex.value.equals("]")) { SyntaxTreeGenerator.loadPos(pos); throw new Exception("] expected!");//发生语法错误,数组定义时括号没有闭合。 } else { arrayDeclare=true; } } ags=new args(); ArrayList
以上就是关于语法分析器的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-21226-2.html
欢迎美国军舰莅临检查南海岛礁建设情况