我正在研究OpenSCAD
语言的JavaScript实现,为此目的,它是一种C类语言。
我已经能够成功解析各种if
和if/else
语句:
if(true) t1=200;t2=500;
if(true) t1=200;
if(true)t1=200;
if(true){t1=200;}
if(true) if(false) {t1=200;}
if(true){t1=200;} else {t2=500;}
然而,我遇到了一个特殊的组合,它让我留下了模糊的语法' - Nearley.js
表示解析可能以多种方式发生:
if(true) if(false) {t1=200;} else {echo("hi");}
尝试的解决方案1:从少数不同来源制作
selection_statement
-> elseIfStatement {% id %}
bareifStatement
-> "if" _ "(" _ expression _ ")" _ statement {% d => d %}
elseIfStatement
-> bareifStatement _ "else" _ statement {% ifstatement %}
| bareifStatement _ elseIfStatement {% id %}
| bareifStatement
尝试解决方案#2 从https://github.com/vsl-lang/VSL/blob/develop/src/vsl/parser/parser.ne
中挑选出来IfStatement
-> "if" _ "(" _ expression _ ")" _ statement (
_ "else" _ (
statement {% id %}
) {% debug %}
):? {% debug %}
尝试解决方案3:仍然可以解析两种方式
selection_statement
-> elseIfStatement {% id %}
elseIfStatement
-> "if" _ "(" _ expression _ ")" _ statement (_ "else" _ statement):? {% ifstatement %}
有没有人用Earley语法成功解析过这种语法?
提示?建议?哎呀,我甚至会采取解决方案!
(整个软件包在github上可用,但在它可以在其他机器上运行之前需要进行一些调整。)https://github.com/JeremyJStarcher/openscadtojs