Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何编写语法检查器?_Ruby_Parsing_Compilation - Fatal编程技术网

Ruby 如何编写语法检查器?

Ruby 如何编写语法检查器?,ruby,parsing,compilation,Ruby,Parsing,Compilation,我对为一种语言编写语法检查器感兴趣。基本上,我想做的是制作一个cli工具,它将接受一个输入文件,然后写入它发现的错误。我想要解析的语言基本上类似于图灵,它相当难看,有时使用起来很痛苦。必须使用它的唯一其他语法检查器 我应该使用什么语言?我想我会用Ruby编写它,但是Python可能更快,或者有更好的解析库 我应该使用Ruby或Pearl中的哪些库?这会更容易 有没有定义语法的入门读物?这样的任务可能会让人困惑,我不知道该如何处理它。如果是我,我会用Ruby编写,以后会担心速度。如果这个程序很受欢

我对为一种语言编写语法检查器感兴趣。基本上,我想做的是制作一个cli工具,它将接受一个输入文件,然后写入它发现的错误。我想要解析的语言基本上类似于图灵,它相当难看,有时使用起来很痛苦。必须使用它的唯一其他语法检查器

我应该使用什么语言?我想我会用Ruby编写它,但是Python可能更快,或者有更好的解析库

我应该使用Ruby或Pearl中的哪些库?这会更容易


有没有定义语法的入门读物?这样的任务可能会让人困惑,我不知道该如何处理它。

如果是我,我会用Ruby编写,以后会担心速度。如果这个程序很受欢迎,我可能会添加一个本地gem来加速最慢的部分,但将大部分放在Ruby中。如果它成为世界上最重要的程序,或者如果我没有别的事要做,我可能会在C或C++中重写它,但不是以前。 我会做所有的事

我可以补充一点,直接用C编写和优化语言解析器是一种有趣的学习经历。您基本上没有得到字符串处理帮助,因此您最终完成了所有的解析,但您有机会只进行最少量的处理。这和Ruby的体验有点相反。为了获得最大的速度,您最终要做一些事情,比如为malloc编写frondend,在malloc块中永久分配您知道永远不必释放的多个对象。虽然在C/C++中使用yacc(1)是典型的,但您当然可以编写递归下降解析器,并有更深入的学习经验


当然,在完成了所有这些之后,我现在很高兴继续使用Ruby。

这是我和其他许多人在这个主题上读到的:@ed-s-我以前听说过龙之书,但我一直认为它只使用C。这是真的,还是更通用?我还以为它是用来编译机器代码的,但我想编译成另一种语言。为什么这个标签是php?我会去掉这个标签。我不认为,速度会是一个真正的问题。您要检查的程序有多大?试想一下,语言A对B的速度是B的两倍。当A需要10秒时,B需要20秒——这对语法检查器来说是个问题吗?速度对于实时任务来说可能是个问题,但是对于语法检查器来说呢?我经常遇到速度问题,不是语言问题,而是算法问题。@sickle:它实际上混合使用了C语法和伪代码,但这并不重要;这些概念才是最重要的。只要你能理解这些,你就可以用任何语言实现它们。也就是说,您不会用python编写编译器。我的意思是,你可以,但出于性能原因,这可能是不明智的。你当然可以用一个简单的语法来强调,你只需要尽可能地提高效率。虽然其他答案给了我在解析/编译方面的职业生涯更完整的答案,但这个答案正是我现在想要的。