compiler-errors - EBNF 表示法的编译器层次结构
问题描述
我正在为我的大学作业开发一种新的编程语言,我必须根据我给出的指令创建它的变量定义形式。一旦创建它们,我就必须创建 EBNF 符号、铁路图和 LEX 程序。
我需要的(是的,我已经用 Google 搜索了很多)是一个更简单的示例或说明,我可以查看这些示例或说明,以便了解一般层次结构。具有变量声明、函数声明、循环、赋值、操作等的东西,但比用 BNF 编写的所有 C 语言更小、更简单。因此,我将了解如何自己制定 EBNF 符号。
正如您可能怀疑的那样,我在编译器领域是全新的,无论如何我并不是要您为我提供任何解决方案。我的重点是学习!
解决方案
对于任何可能关注以供将来参考的人:
我使用 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语言的变量声明部分。
下面的语法图是分析变量类型的部分,
推荐阅读
- java - PrinterJob.lookupPrintServices() 在 Ubuntu 16 系统上返回空数组
- excel - 复选框作为条件
- active-directory - 通过 LDS 实例在 AD 中搜索用户
- apache-kafka - Kafka Streams - flatMapValues 的 Integral 与 Separable 处理程序
- alfresco - bpm 方案中定时器事件后如果有服务任务或脚本任务出错(Alfresco 的 Activiti 6)
- c++ - 无法将数组中的负值转换为正值?
- macos - 如何在 CodeBlocks 中处理此错误?
- cloud - SAP 云平台日志文件 API
- swift - 快速构建:错误:无法构建 Objective-C 模块“达尔文”
- python - 函数、方法以及我必须给它们多少个参数?