聚乙二醇在解析器中实现变量
PEGjs | Implement Variable in Parser
我是 PEGjs 的新手
我需要帮助来实现对我的解析器的变量(标识符)声明支持。
我的输入代码如下:
a=4;
print a
我的 PEGjs 语法:
start
=(line)*
line
=left:var"="right:integer";" {left=right;}
/
print middle:var {return middle;}
print
="print"
var
=(a-zA-z)+
Integer "integer"
= _ [0-9]+ { return parseInt(text(), 10); }
预期输出: 4
请帮助我。 #ThanksInAdvance
试试这个:
all
= _ mn:multiPutN _ pn:printN _
{
return mn[pn];
}
multiPutN
= mp:putN+ _
{
var r = {};
mp.forEach(it => {
r[it[0]]=it[1];
});
return r;
}
putN
= vn:varName _ "=" _ nn:n _ ";" { return [vn, nn]}
printN
= print _ n:varName _ {return n;}
varName
= [a-zA-Z]+ {return text();}
print
="print"
n "integer number"
= _ [0-9]+ { return parseInt(text(), 10); }
_ "whitespace or new line"
= [ \t\n\r]*
所以上面的代码也支持多变量但只能打印一个变量。
我根据您的示例编写了语法,因此在分配变量值时您需要放置“;”最后但 print var 不需要那个
我是 PEGjs 的新手 我需要帮助来实现对我的解析器的变量(标识符)声明支持。
我的输入代码如下:
a=4;
print a
我的 PEGjs 语法:
start
=(line)*
line
=left:var"="right:integer";" {left=right;}
/
print middle:var {return middle;}
print
="print"
var
=(a-zA-z)+
Integer "integer"
= _ [0-9]+ { return parseInt(text(), 10); }
预期输出: 4
请帮助我。 #ThanksInAdvance
试试这个:
all
= _ mn:multiPutN _ pn:printN _
{
return mn[pn];
}
multiPutN
= mp:putN+ _
{
var r = {};
mp.forEach(it => {
r[it[0]]=it[1];
});
return r;
}
putN
= vn:varName _ "=" _ nn:n _ ";" { return [vn, nn]}
printN
= print _ n:varName _ {return n;}
varName
= [a-zA-Z]+ {return text();}
print
="print"
n "integer number"
= _ [0-9]+ { return parseInt(text(), 10); }
_ "whitespace or new line"
= [ \t\n\r]*
所以上面的代码也支持多变量但只能打印一个变量。 我根据您的示例编写了语法,因此在分配变量值时您需要放置“;”最后但 print var 不需要那个