构建语法检查器



我正在用我自己的脚本语言构建一个像编译器一样的应用程序。用户将输入代码,输出将是另一个应用程序。所以我需要告诉用户哪些行是错的,为什么是错的。

但我不知道如何开始。

我想:所有行都以关键字开头,除了那些以变量开头的行。太不一样了,错了。因此,我可以计算下一个有效条目并检查它们。

同样,我认为我可以检查每一行,但这很复杂,因为我可以有这个

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

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

或者

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

那么为什么不删除换行符并检查呢?因为我将丢失行号,在这种情况下,行号是最重要的。也许我要在有和没有换行符的代码之间创建一个映射

但首先我想听听你,如果你已经有了这样的经验,或者你有什么想法。

谢谢

有形式语言来描述语言的语法和语义,并且有工具可以从这些描述中生成解析器。我建议初学者阅读flex和bison。

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

为了能够在语法意义上识别一行是否错误,您需要构建一个解析器。解析器检查上下文无关的语法,从其标记中找到结构的正确派生。

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

我上过这门课,cs241。有一套很好的课程笔记里面都有详细的解释。https://github.com/christhomson/lecture-notes/blob/master/cs241.pdf

您应该检查以下工具:lex, bisonyacc

lex是词法分析器生成器。它生成一个代码,该代码可用于将脚本分解为令牌(如数字,关键字等…)。

bisonyacc都是解析器生成器。两者都可用于生成解析语言的代码(将令牌组合为语句)。

只要谷歌这些工具的教程。

最新更新