首页 > 解决方案 > EBNF 表示法的编译器层次结构

问题描述

我正在为我的大学作业开发一种新的编程语言,我必须根据我给出的指令创建它的变量定义形式。一旦创建它们,我就必须创建 EBNF 符号、铁路图和 LEX 程序。

我需要的(是的,我已经用 Google 搜索了很多)是一个更简单的示例或说明,我可以查看这些示例或说明,以便了解一般层次结构。具有变量声明、函数声明、循环、赋值、操作等的东西,但比用 BNF 编写的所有 C 语言更小、更简单。因此,我将了解如何自己制定 EBNF 符号。

正如您可能怀疑的那样,我在编译器领域是全新的,无论如何我并不是要您为我提供任何解决方案。我的重点是学习!

标签: compiler-errorscompilationcompiler-constructionbnfebnf

解决方案


对于任何可能关注以供将来参考的人:

我使用 Pascal EBNF 表示法完成了我的作业,这与我收到的作业说明非常接近。更具体地说,我被告知我必须创建的语言的变量定义必须以单词“var”开头,然后相同类型的变量名称后面用逗号分隔。考虑到这一点,我使用了以下 Pascal EBNF 表示法。

var_part = var [identifier { "," identifier } ":" type "κ" { }].

identifier = letter { letter | digit }.

type = "integer" | "real" | "char" | "boolean".

letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z".

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

EBNF的第一行,我根据下面的语法图自己创建的,这是Pascal语言的变量声明部分。

在此处输入图像描述

下面的语法图是分析变量类型的部分,

在此处输入图像描述


推荐阅读