自己抽了一下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 ")".
有了形式定义,再就是找时间实现了。
分享到:
相关推荐
相当不错的的一篇文章
yacc用于根据巴科斯范式(BNF)定义的语言语法生成解析器,而lex(flex)则用于生成词法分析器,识别输入源代码中的单词标记。在本项目中,“Common Lisp中的yacc和lex克隆”意味着开发者使用Lisp语言重新实现了这两...
5. **定制和扩展**:作为Emacs模式的一部分,`bnf-mode`可以通过Emacs Lisp进行扩展和定制,以满足个人或项目特定的需求。 6. **其他辅助功能**:比如快捷键绑定、文档查看、错误检查等,都是`bnf-mode`提升开发...
gossip的bnf文法 文法主要参考自 s_expr : list | atomic list: '(' s_expr < s_expr > ')' atomic: INT | FLOAT | STRING | NAME 注释 使用"--",进行行注释。 标准输出 使用print命令,进行输出。 全局变量 ...
函数式语言如LISP,强调用数学函数的方式处理问题,而逻辑式语言如Prolog,基于逻辑推理进行计算。 编程语言的设计和评价通常会考虑以下几个方面: 1. 可读性:语言的整体结构和语法应易于理解,以便于代码的阅读...
2. **应用式(Applicative Language)**:如Lisp,基于函数应用,强调计算过程而非数据状态。 3. **基于规则(Rule-Based Language)**:如Prolog,基于逻辑规则推理,主要用于知识表示和推理。 4. **面向对象...
- **Algol**:有严谨的语法规则,是分程序结构语言,用巴科斯范式(BNF)描述其文法。 - **Cobol**:面向事务处理,广泛应用于数据库管理系统。 - **Pascal**:强大的数据结构表达能力,适合数据结构编程。 - **C*...
在Groovy中,DSL并不一定需要预定义的BNF(巴科斯范式)文法来解析,因为Groovy的编译器可以处理用户在运行时提供的脚本。这使得创建DSL变得相对简单,例如`MySimpleDsl.groovy`中的例子,它执行用户提供的脚本,但...
2. **上下文无关文法**:这是语法分析的基础,BNF(巴科斯范式)被用来描述上下文无关文法,LR、LL等解析技术则用于构建解析器。 3. **语义规则**:在语义分析阶段,我们需要理解如何定义和执行语义规则,例如类型...
例如,Lisp、Haskell、Scheme和Scala都是流行的函数式编程语言。在这个项目中,学生可能需要选择或设计一个简单的函数式语言作为目标语言。 2. **编译器设计** 编译器是将源代码转换为目标代码的软件,使得源代码...
它基于巴科斯范式(Backus-Naur Form,BNF)语法规范,将这些规范转换成解析器的C代码,帮助开发者构建能够理解特定语法的程序,例如编译器或解释器。Yacc的工作流程是:先定义语法规则,然后由Yacc生成C源代码,...
这里可能涉及到Yacc(Yet Another Compiler-Compiler)工具,它是Lisp社区中的 Bison 或者Java社区中的ANTLR的前身。Yacc使用巴科斯范式(BNF)定义的上下文无关文法来解析输入,生成解析树,确保程序结构正确。 3....
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 ...
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 从故事中学到...
previous up contents next C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日 版权所有 © 2005 ... * 1.... * 2.... * 3.... o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费...
内容简介 《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数...
第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。...
老资源。 目录 1 声明和初始化1 1.1 我如何决定使用那种整数类型? . . . .... .... .... .... .... .... ........ .... ................ ....2.1 声明struct x1 f .... 和typedef struct f .... ....2.2 为什么struct x f .... .... .... .... .... .... .... .... .... .... .... ....