public void judge_SLRSLR_Grammar grammar itemsgrammar; Analysis_table_structuregrammar; public void itemsSLR_Grammar grammar HashSetstring hashS
该代码实现了SLR语法分析器的构建过程,主要分为以下几个步骤:
-
items函数:构建DFA的状态集合 首先,将起始符号的所有产生式加入一个HashSet中,并在每个产生式的开头加上"."。然后,通过CLOSURE函数计算闭包,得到该状态的所有可能产生式。将该状态加入DFA状态集合中。接着,对于每个状态,遍历所有终结符和非终结符,计算GOTO函数得到下一个状态,如果该状态非空且未被加入DFA集合中,则将其加入DFA集合中。不断重复此过程,直到DFA集合不再增加。
-
Analysis_table_structure函数:构建分析表 遍历DFA集合中的所有状态和产生式,对于每个产生式,判断其是否为规约项(即"."在末尾),如果是,则根据该产生式的前缀和后缀计算其对应的规约动作,并将其加入ACTION表中。如果该产生式的前缀和后缀都为空,则该状态为接受状态,将其对应的动作加入ACTION表中。如果该产生式的后缀为终结符,则计算GOTO函数得到下一个状态,将其对应的移进动作加入ACTION表中。如果该产生式的后缀为非终结符,则计算GOTO函数得到下一个状态,将其对应的状态编号加入GOto表中。最终,判断该语法是否为SLR(1)文法。
总的来说,该代码实现了SLR语法分析器的构建过程,将文法转换为DFA状态集合和分析表,方便后续进行语法分析
原文地址: https://www.cveoy.top/t/topic/hsMp 著作权归作者所有。请勿转载和采集!