我注意到明显缺乏LL解析器,它们在函数式语言中创建解析器.对于我一直在寻找没有成功的东西的理想发现是为ANTLR样式的LL(*)语法生成Haskell解析器(模式的重新格式化模式),并且惊讶于每个最后的解析器生成器都具有功能我找到的语言目标是某种LR解析器.
我想将我正在研究的这种语言的解析器从ANTLR转换为语言本身的自托管,如果我能用其他函数式语言输入几乎肯定正确的语言,它会有很大的帮助. (最好是我熟悉的,Haskell和Scala),而不是必须从头开始重写它,尽管最后我可能会这样做,因为核心语言很小.
在这一点上,甚至对此的解决方案甚至比我更好奇为什么没有这样的LL(*)甚至LL(k)解析器生成器,但是许多LR生成器,因为LL本身就更容易.
haskell functional-programming scala parser-generator antlr3
我刚刚转换了一个iOS Cordova应用程序,该应用程序使用SplashScreen插件来使用Launch Storyboard,因此它将支持iPad上的iOS 9多任务处理.这有效,但现在我在发布故事板和应用程序的第一个屏幕之间有一个白色的闪光.以前,当我使用splashscreen插件时,我关闭了AutomaticHideSplashScreen并使用splashscreen插件API来隐藏它,当我确定第一个屏幕的渲染将完成时.
有没有办法做类似的事情,或者至少延迟启动画面的消失,以便给webview时间渲染?
我的问题是关于在ANTLRWorks中运行以下语法:
INT :('0'..'9')+;
SEMICOLON: ';';
NEWLINE: ('\r\n'|'\n'|'\r');
STMTEND: (SEMICOLON (NEWLINE)*|NEWLINE+);
statement
: STMTEND
| INT STMTEND
;
program: statement+;
Run Code Online (Sandbox Code Playgroud)
无论选择哪个换行NL(CR / LF / CRLF)或整数,我都可以通过以下输入(以程序作为开始规则)获得以下结果:
“; NL ”或“ 32; NL ”解析没有错误。“;” 或“ 45;” (不包含换行符)将导致EarlyExitException。“ NL ”本身解析没有错误。不带分号的“ 456 NL ”会导致MismatchedTokenException。
我想要的是一个语句以换行符,分号或分号后接换行符来终止,并且我希望解析器在终止符上尽可能多地吃掉连续的换行符,因此“; NL NL NL NL ”只是一个终端,而不是四个或五个。另外,我希望文件结尾的情况也可以是有效的终止,但是我还不知道该怎么做。
那么,这有什么问题,如何使它在EOF终止呢?我对解析,ANTLR和EBNF完全陌生,并且在简单的计算器示例和参考之间的某个水平上,我没有发现太多要阅读的资料(我有The Definitive ANTLR Reference,但它确实是一个参考,前面有一个快速入门,我还没有在ANTLRWorks之外运行过,所以任何阅读建议(除了Wirth的1977 ACM论文)也将有所帮助。谢谢!