EBNF 表示法的编译器层次结构

时间:2021-03-28 14:39:38

标签: compiler-errors compilation compiler-construction bnf ebnf

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

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

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

1 个答案:

答案 0 :(得分:1)

致任何可能担心以供日后参考的人:

我使用 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语言的变量声明部分。

enter image description here

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

enter image description here

相关问题