2013-05-12 37 views
3

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

但我不知道该如何开始。

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

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

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

或者

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

甚至

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

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

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

感谢

回答

1

有正式的语言来描述语法和语言的语义,并且有将产生解析器这些描述的工具。我建议阅读flex和野牛的初学者。

1

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

为了能够识别行是错误的,在语法上,您需要构建解析器。 解析器检查上下文无关文法,以从其令牌正确导出结构。

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

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

+0

谢谢@ sunapi386,将是有用的 – lcssanches 2013-05-12 22:03:36

1

您应该检查类似的工具:lexbisonyacc

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

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

只是谷歌教程这些工具。

+0

我刚刚阅读关于反讽项目http://irony.codeplex.com/。我不太确定,但我认为我可以使用它。 – lcssanches 2013-05-12 22:01:08