自己抽了一下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描述 #### 摘要 LISP(LISt Processing)是一种重要的符号处理编程语言,自1958年由John McCarthy提出以来,在人工智能领域得到了广泛的应用和发展。Scheme语言作为LISP的一种方言...
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命令,进行输出。 全局变量 ...
3. **Lisp方言**:Lisp语言拥有多个方言,包括Common Lisp、Clojure、Scheme等。Scheme是一种精简的Lisp方言,倾向于提供一种更为简单的语法和更少的语法歧义。 4. **函数式编程范式**:在函数式编程范式中,编程...
函数式语言如LISP,强调用数学函数的方式处理问题,而逻辑式语言如Prolog,基于逻辑推理进行计算。 编程语言的设计和评价通常会考虑以下几个方面: 1. 可读性:语言的整体结构和语法应易于理解,以便于代码的阅读...
2. **应用式(Applicative Language)**:如Lisp,基于函数应用,强调计算过程而非数据状态。 3. **基于规则(Rule-Based Language)**:如Prolog,基于逻辑规则推理,主要用于知识表示和推理。 4. **面向对象...
此外,文档使用扩展BNF(巴科斯-诺尔范式)来提供Scheme语言的形式语法定义,并定义了形式指称语义。文档还包括了使用Scheme语言编写程序的示例,以及参考文献列表和索引,这些内容帮助读者更好地理解文档的各个部分...
- **Algol**:有严谨的语法规则,是分程序结构语言,用巴科斯范式(BNF)描述其文法。 - **Cobol**:面向事务处理,广泛应用于数据库管理系统。 - **Pascal**:强大的数据结构表达能力,适合数据结构编程。 - **C*...
Scheme是一种静态作用域和适当尾递归的Lisp编程语言变体,由Guy Lewis Steele Jr.和Gerald Jay Sussman发明。自诞生以来,Scheme因其清晰简洁的语义和表达力而备受推崇,在多种编程范式(如命令式、函数式以及面向...
R5RS还提供了Scheme的正式语法和语义描述,采用扩展的巴科斯范式(Extended BNF)来描述语言的结构,并给出了形式化的语义定义。 #### 示例程序 报告中还包含了一个Scheme程序的例子,用于演示语言的实际使用方法...
在Groovy中,DSL并不一定需要预定义的BNF(巴科斯范式)文法来解析,因为Groovy的编译器可以处理用户在运行时提供的脚本。这使得创建DSL变得相对简单,例如`MySimpleDsl.groovy`中的例子,它执行用户提供的脚本,但...
Scheme语言是一种Lisp语言的方言,由Guy Lewis Steele Jr.和Gerald Jay Sussman发明,其特点包括静态作用域和严格的尾递归优化,它旨在拥有清晰和简明的语义,并且在风格上支持命令式、函数式和消息传递式编程。 在...
2. **上下文无关文法**:这是语法分析的基础,BNF(巴科斯范式)被用来描述上下文无关文法,LR、LL等解析技术则用于构建解析器。 3. **语义规则**:在语义分析阶段,我们需要理解如何定义和执行语义规则,例如类型...
例如,Lisp、Haskell、Scheme和Scala都是流行的函数式编程语言。在这个项目中,学生可能需要选择或设计一个简单的函数式语言作为目标语言。 2. **编译器设计** 编译器是将源代码转换为目标代码的软件,使得源代码...
Scheme是一种功能强大的编程语言,属于Lisp家族的一员。它由Guy Lewis Steele Jr. 和 Gerald Jay Sussman共同发明,旨在提供一种简洁、清晰的语言结构,支持多种编程范式,如命令式编程、函数式编程以及消息传递式...
它基于巴科斯范式(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 ...