如何在代码中表示上下文无关的语法?

时间:2018-10-17 15:20:32

标签: java parsing data-structures compiler-construction antlr

我想将编译器作为个人项目编写,并且正在阅读和理解解析器(LL(k),LR(k),SLR等)的过程中

所有这些解析器都是基于某种来自用户的语法,并且该语法通常写在一个文本文件中(例如,在ANTLR中,它在一个.g4文件中,这是一个文本文件IMO)。如果我希望解析器从这样的语法文件创建其解析表,那么解析它并用代码表示结果的最佳方法是什么?

编辑:

例如,假设我有此语法:

S -> 'a'|'b'|'('S')'|T
T -> '*'S

我当时正在考虑解析此给定的语法并将其存储为ArrayList<ArrayList<String>>。这样,ArrayList中的每个项目都将是来自同一非终端的产品的集合:

// with this type of a representation, I can assign an id to each production
//For example, production S -> 'a' has id 01 or T -> '*'S has an id of 10 and so on
{
{"S", "'a'", "'b'", "'('S')'", "T"},
{"T", "'*'S"}
}

我不确定将语法表示为AST,因为那样我不知道如何为每个作品分配ID。但是,上面对语法的表示对我来说似乎是很幼稚的设计,我怀疑应该有一些标准的方法来做到这一点,这将更容易使用。

0 个答案:

没有答案