Syntax 构建语法检查器

Syntax 构建语法检查器,syntax,ide,syntax-error,validation,Syntax,Ide,Syntax Error,Validation,我正在用自己的脚本语言构建一个类似于编译器的应用程序。用户将输入代码,输出将是另一个应用程序。 所以,我需要告诉用户,如果某一行是错误的,为什么是错误的 但我不知道如何开始 我想: 除以变量开头的行外,所有行都将以关键字开头。这些都是错误的。 因此,我可以计算下一个有效条目并检查它们 另外,我想我可以检查每一行,但它很复杂,因为我可以有这个 var varName { /* ... */ }; 或 甚至 var varName { /* ... */ }; 那么,为什么不删除断开线并进行检查

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

但我不知道如何开始

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

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

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

甚至

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

但是首先我想听听你的意见,如果你已经有过这样的经历或者你有任何想法的话


谢谢

有正式的语言来描述语言的语法和语义,还有一些工具可以根据这些描述生成解析器。我建议初学者阅读flex和bison。编写自己的语言会相当复杂。但完全可行

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

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

我上过这门课,CS241。有一套非常好的课程笔记,这些都有详细的解释。
您应该检查以下工具:
lex
bison
yacc

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

bison
yacc
都是解析器生成器。这两种方法都可以用于生成用于解析语言的代码(将标记与语句组合)


只是谷歌那些工具的教程

我刚才在读关于讽刺计划的书。我不太清楚,但我想我可以用它。谢谢@sunapi386,会有用的
var varName
{
/* ... */
};