构建一个语法检查器

3
我正在构建一个类似编译器的应用程序,使用自己的脚本语言。用户将输入代码,并输出另一个应用程序。 因此,我需要告诉用户哪些行是错误的,以及为什么是错误的。
但是,我不知道该如何开始。
我考虑过这样做: 所有行都将以关键字开头,除了以变量开头的行。所以它们不同,容易出错。 因此,我可以计算下一个有效条目并检查它们。
另外,我想到可以逐行检查,但这很复杂,因为我可能会遇到这种情况:
var varName { /* ... */ };

或者

var varName {
/* ... */
};

甚至更好
var varName
{
/* ... */
};

所以为什么不去掉换行符并检查呢?因为我会失去行号,而在这种情况下行号是最重要的。 也许我将创建一个代码与有无换行符的映射表。
但首先我想听听你的意见,如果你已经有了这方面的经验或者有任何想法,请告诉我。
谢谢。
3个回答

1

有正式的语言来描述语言的语法和语义,还有工具可以根据这些描述生成解析器。我建议初学者阅读flex和bison相关内容。


1

编写自己的语言将会相当复杂。但是完全可行。

为了能够识别一行代码是否在句法上有误,你需要构建一个解析器。 解析器检查无上下文文法并从其标记中正确推导出结构。

首先,您需要对文件进行分词,然后将其重构为解析树(以检查语法)。

我曾经上过一门这方面的课程,CS 241。有一套非常好的课程笔记详细地解释了所有内容。 https://github.com/christhomson/lecture-notes/blob/master/cs241.pdf


谢谢@sunapi386,会很有用。 - lcssanches

1
你应该查看像:lexbisonyacc这样的工具。

lex是词法分析器生成器。它生成的代码可以用于将脚本分解为标记(如数字、关键字等)。

bisonyacc都是解析器生成器。都可用于生成解析您的语言的代码(将标记组合成语句)。

只需在Google上搜索这些工具的教程即可。


我刚刚在阅读关于Irony项目的内容http://irony.codeplex.com/。虽然我没有完全了解,但我认为我可以使用它。 - lcssanches

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接