构建语法检查器

时间:2013-05-12 21:43:37

标签: syntax ide syntax-error validation

我正在使用自己的脚本语言构建一个类似编译器的应用程序。用户将输入代码,输出将是另一个应用程序。 所以我需要告诉用户一些行是否错误以及原因是什么。

但我不知道如何开始。

我想到了这个: 除了那些以变量开头的人之外,所有行都将以关键字开头。如此不同,这是错误的。 所以,我可以计算下一个有效的条目并检查它们。

另外,我认为我可以检查每一行,但它很复杂,因为我可以拥有这个

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

或者

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

甚至

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

那么为什么不删除断行并检查?因为我会丢失行号,在这种情况下是最重要的。 也许我打算在有和没有断线的代码之间创建一个地图。

但首先我想听听你的意见,如果你已经有这种经历或者你有任何想法。

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

为了能够识别一行是否错误,从语法上讲,你需要构建一个解析器。 解析器检查无上下文语法,以便从其标记中正确推导出结构。

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

我参加了一个课程,CS 241.这里有一套非常好的课程笔记,详细解释了这一点。 https://github.com/christhomson/lecture-notes/blob/master/cs241.pdf

答案 2 :(得分:1)

您应该检查以下工具:lexbisonyacc

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

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

这些工具只是谷歌教程。