`
smithsun
  • 浏览: 11067 次
  • 性别: Icon_minigender_2
  • 来自: 昆明
社区版块
存档分类
最新评论

Lisp的BNF

阅读更多

自己抽了一下lisp的简单BNF定义(不全,后边再续)

 

list -> "[" atom ("," atom)* "]"
atom -> digit | id | list

digit -> [0-9]+
id -> [a-zA-Z_][a-zA-Z]*

 

如果用javacc写一个分析器,则可以实现一个简单的嵌入式脚本,呵呵。

 

在网上找了一个比较全的,在这里贴出来:

letter ::= "A" | "B" | ... | "Z",
number ::= "1" | "2" | ... | "9",
atomic_symbol ::= letter atom_part,
atom_part ::= empty | letter atom_part | number atom_part,
empty ::= "",
S_expression ::= atomic_symbol | "(" S_expression "."S_expression ")" | 
list,
list ::=	"(" S_expression # S_expression ")".

 有了形式定义,再就是找时间实现了。

分享到:
评论

相关推荐

    lisp语言的特点及其文法的bnf描述

    相当不错的的一篇文章

    cpp-CommonLisp中的C11解析器CommonLisp中的yacc和lex克隆

    yacc用于根据巴科斯范式(BNF)定义的语言语法生成解析器,而lex(flex)则用于生成词法分析器,识别输入源代码中的单词标记。在本项目中,“Common Lisp中的yacc和lex克隆”意味着开发者使用Lisp语言重新实现了这两...

    bnf-mode:GNU Emacs主要模式,用于编辑BNF语法

    5. **定制和扩展**:作为Emacs模式的一部分,`bnf-mode`可以通过Emacs Lisp进行扩展和定制,以满足个人或项目特定的需求。 6. **其他辅助功能**:比如快捷键绑定、文档查看、错误检查等,都是`bnf-mode`提升开发...

    99乘法表java源码-gossip:一个javalisp解析器

    gossip的bnf文法 文法主要参考自 s_expr : list | atomic list: '(' s_expr < s_expr > ')' atomic: INT | FLOAT | STRING | NAME 注释 使用"--",进行行注释。 标准输出 使用print命令,进行输出。 全局变量 ...

    复习纲要1

    函数式语言如LISP,强调用数学函数的方式处理问题,而逻辑式语言如Prolog,基于逻辑推理进行计算。 编程语言的设计和评价通常会考虑以下几个方面: 1. 可读性:语言的整体结构和语法应易于理解,以便于代码的阅读...

    高级语言及其语法描述PPT课件.pptx

    2. **应用式(Applicative Language)**:如Lisp,基于函数应用,强调计算过程而非数据状态。 3. **基于规则(Rule-Based Language)**:如Prolog,基于逻辑规则推理,主要用于知识表示和推理。 4. **面向对象...

    软件设计师专题02:编译原理.doc

    - **Algol**:有严谨的语法规则,是分程序结构语言,用巴科斯范式(BNF)描述其文法。 - **Cobol**:面向事务处理,广泛应用于数据库管理系统。 - **Pascal**:强大的数据结构表达能力,适合数据结构编程。 - **C*...

    groovy

    在Groovy中,DSL并不一定需要预定义的BNF(巴科斯范式)文法来解析,因为Groovy的编译器可以处理用户在运行时提供的脚本。这使得创建DSL变得相对简单,例如`MySimpleDsl.groovy`中的例子,它执行用户提供的脚本,但...

    《编译原理》清华第二版习题答案-清华版.rar )

    2. **上下文无关文法**:这是语法分析的基础,BNF(巴科斯范式)被用来描述上下文无关文法,LR、LL等解析技术则用于构建解析器。 3. **语义规则**:在语义分析阶段,我们需要理解如何定义和执行语义规则,例如类型...

    [本科毕业设计] 简单的函数式语言实现(编译器+解释器).zip

    例如,Lisp、Haskell、Scheme和Scala都是流行的函数式编程语言。在这个项目中,学生可能需要选择或设计一个简单的函数式语言作为目标语言。 2. **编译器设计** 编译器是将源代码转换为目标代码的软件,使得源代码...

    MVP3

    它基于巴科斯范式(Backus-Naur Form,BNF)语法规范,将这些规范转换成解析器的C代码,帮助开发者构建能够理解特定语法的程序,例如编译器或解释器。Yacc的工作流程是:先定义语法规则,然后由Yacc生成C源代码,...

    CompilerPrinciple:本课程的源代码和注释

    这里可能涉及到Yacc(Yet Another Compiler-Compiler)工具,它是Lisp社区中的 Bison 或者Java社区中的ANTLR的前身。Yacc使用巴科斯范式(BNF)定义的上下文无关文法来解析输入,生成解析树,确保程序结构正确。 3....

    安卓语法高亮编辑器HighlightTextEditor.zip

    ascend.lang eiffel.lang lisp.lang pike.lang sql.lang asp.lang erlang.lang logtalk.lang pl1.lang squirrel.lang aspect.lang euphoria.lang lotos.lang plperl.lang styl.lang assembler.lang express.lang ...

    代码之美(中文完整版).pdf

    5.4 版本2:模拟BNF语法——复杂度O(N) 5.5 版本3:第一个复杂度O(log N)的优化 5.6 版本4:第二次优化:避免重复验证 5.7 版本5:第三次优化:复杂度 O(1) 5.8 版本 6:第四次优化:缓存(Caching) 5.9 从故事中学到...

    C语言FAQ 常见问题列表

    previous up contents next C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日 版权所有 © 2005 ... * 1.... * 2.... * 3.... o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费...

    《你必须知道的495个C语言问题》

    内容简介 《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数...

    你必须知道的495个C语言问题

    第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。...

    你必须知道的495个C语言问题(PDF)

    老资源。 目录 1 声明和初始化1 1.1 我如何决定使用那种整数类型? . . . .... .... .... .... .... .... ........ .... ................ ....2.1 声明struct x1 f .... 和typedef struct f .... ....2.2 为什么struct x f .... .... .... .... .... .... .... .... .... .... .... ....

Global site tag (gtag.js) - Google Analytics