1oid analyseresult23 var selects = selectgetselects;4 analysepush#;5 analysepushselectsFirstKey0;6 inputpush#;7 for int i= textLength-1; i=0; i--8 inputpushtexti;9 result_anal
该代码是一个语法分析器的函数,主要功能是对输入的文本进行分析,判断其是否符合语法规则。具体分析如下:
-
第3行获取选择集,即文法中每个非终结符对应的所有产生式。
-
第4行和第5行分别向分析栈和输入栈中添加标识符#和文法开始符号。
-
第7行到第8行将输入文本中的字符逆序添加到输入栈中。
-
第9行和第10行将当前分析栈和输入栈的状态添加到相应的结果列表中。
-
第12行开始进入无限循环,直到匹配成功或失败。
-
第15行判断分析栈栈顶元素是否为终结符。如果是终结符,则执行第18到第29行的操作。
-
第18行到第22行判断是否匹配成功,如果是则返回成功,否则返回失败。
-
第23到第27行表示匹配成功,将分析栈和输入栈中的栈顶元素弹出,并将状态添加到结果列表中。
-
第32行到第36行表示匹配失败,直接返回失败。
-
第39到第57行判断分析栈栈顶元素是否为非终结符,并在选择集中找到该非终结符可以推导出当前输入栈栈顶元素的产生式。如果能找到,则执行第46到第54行的操作。
-
第46行到第52行表示将当前推导出的产生式中的符号添加到分析栈中,并将状态添加到结果列表中。
-
第59到第63行表示无法找到该非终结符可以推导出当前输入栈栈顶元素的产生式,直接返回失败。
-
整个函数的作用是逐步将输入栈中的字符推导为文法中的某个符号,直到分析栈和输入栈中均只剩下#符号,即匹配成功
原文地址: https://www.cveoy.top/t/topic/g10l 著作权归作者所有。请勿转载和采集!