3

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

但我不知道如何开始。

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

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

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

或者

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

甚至

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

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

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

谢谢

4

3 回答 3

1

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

于 2013-05-12T21:54:28.993 回答
1

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

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

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

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

于 2013-05-12T21:54:34.157 回答
1

您应该检查以下工具lexbisonyacc

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

bison并且yacc都是解析器生成器。两者都可用于生成代码以解析您的语言(将标记组合到语句)。

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

于 2013-05-12T21:55:46.227 回答