转载请注明出处:https://blog.csdn.net/hhhhhhhhhhkkkkkkkkkk
demo 1 加乘计算器-无语义函数
#include<stdio.h>
#include"_lr1.h"
enum e_non
{
e_entry=-0xffff,
e_exp,
};
t_grammar g=
{
{
{e_entry,{e_exp},nullptr,0},
{e_exp,{e_exp,'+',e_exp},nullptr,0},
{e_exp,{e_exp,'*',e_exp},nullptr,0},
{e_exp,{'i'},nullptr,0},
},
{
{'+',{1,e_ass_left}},
{'*',{2,e_ass_left}},
{'i',{3,e_ass_left}},
},
nullptr
};
int main(int argc, const char*argv[])
{
grammar_make_pri_ass(g);
print_grammar(g);
auto cluster = cluster_build(g, 0);
printf("---------------------\n");
print_cluster(cluster, g.sens);
printf("---------------------\n");
t_analyzer ana;
ana.analysis(std::vector<int>{ 'i','+','i','*','i',0 }, cluster, g, nullptr);
getchar();
return 0;
}
下面是结果截图:
可以看到,分析结果的第三行浮点数不正确,因为我们根本没写语义分析函数。