如何做弯曲/野牛
我希望我的语言有两个功能,使蟒蛇般的压痕Python
这样一个很好的格式化语言:如何做弯曲/野牛
- 每行一个声明
- 块与另一缩进级别开始并继续下去,直到结束
任何人都可以给我一个关于如何实现与flex/bison
类似的工具,如何实现该提示?这种功能强制用户编写可读代码。
我认为没有办法只用lex/yacc来制作一个python-like语法分析器,因为lex/yacc只能处理上下文无关文法,但是python-like语法是上下文敏感的。
的原因是,如果你想找到一个声明,前一个是同一块,你应该让这种说法知道前一个缺口,那就是环境。
我建议你除了法/ yacc的一些额外的逻辑来实现这一点,而不会那么辛苦了。您可以在“语法”模块中阅读代码here。
的关键是,让法/ yacc的部分解析单个语句,与缩进级别,并且写的东西包装陈述成块。
您可以尝试跟踪词法分析器缩进级别,并添加伪令牌缩进和取消缩进。您需要保留已经看到的缩进级别堆栈,并且需要关注空白/仅限注释的行。但我担心,词法分析器最终会变成一个难以维护的混乱,并且在词法分析器中还有一些特定于语法分析的状态(缩进堆栈)。
可惜我只能标记一个作为答案。谢谢,您的意见对我有很大的帮助。 – Lanbo 2011-05-14 06:47:00
马特也许写了一篇关于独立解析器的文章,与使用“unput”处理显著空白的方式:
http://matt.might.net/articles/standalone-lexers-with-lex/
(这个例子是中途下页)
说,用Haskell的'Parsec'这样做会更容易吗?我听说它不仅仅是上下文无关的。 – Lanbo 2011-05-17 17:04:26