1、支持unicode
2、支持utf-8
3、例子如下:
VarDeclaration<ref int adr> (. string name; TypeDesc type; .)
= Ident<out name> (. Obj x = symTab.Enter(name);
int n = 1; .)
{ ',' Ident<out name> (. Obj y = symTab.Enter(name);
x.next = y; x = y;
n++; .)
}
':' Type<out type> (. adr += n * typ.size;
for (int a = adr; x != null; x = x.next) {
a -= type.size;
x.adr = a;
} .)
';' .
The core of this specification is the EBNF production
VarDeclaration = Ident {',' Ident} ':' Type ';'.
void VarDeclaration(ref int adr) {
string name; TypeDesc type;
Ident(out name);
Obj x = symTab.Enter(name);
int n = 1;
while (la.kind == comma) {
Get();
Ident(out name);
Obj y = symTab.Enter(name);
x.next = y; x = y;
n++;
}
Expect(colon);
Type(out type);
adr += n * type.size;
for (int a = adr; x != null; x = x.next) {
a -= type.size;
x.adr = a;
}
Expect(semicolon);
}
4、表达式规则如下:
ident = letter {letter | digit}.
number = digit {digit}.
string = '"' {anyButQuote} '"'.
char = '\'' anyButApostrophe '\''.
\\ backslash \r carriage return \f form feed
\' apostrophe \n new line \a bell
\" quote \t horizontal tab \b backspace
\0 null character \v vertical tab \uxxxx hex char value
The following identifiers are reserved keywords (in the C# version of Cocol/R the
identifier using is also a keyword, in the Java version the identifier import):
ANY CONTEXT IGNORE PRAGMAS TOKENS
CHARACTERS END IGNORECASE PRODUCTIONS WEAK
COMMENTS FROM NESTED SYNC
COMPILER IF out TO
Comments are enclosed in /* and */ and may be nested. Alternatively they can start
with // and go to the end of the line.
EBNF
All syntax descriptions in Cocol/R are written in Extended Backus-Naur Form
(EBNF) [Wirth77]. By convention, identifiers starting with a lower case letter denote
terminal symbols, identifiers starting with an upper case letter denote nonterminal
symbols. Strings denote themselves. The following meta-characters are used:
symbol meaning example
= separates the sides of a production A = a b c .
. terminates a production A = a b c .
| separates alternatives a b | c | d e means a b or c or d e
( ) groups alternatives (a | b) c means a c or b c
[ ] option [a] b means a b or b
{ } iteration (0 or more times) {a} b means b or a b or a a b or ...
Attributes are written between < and >. Semantic actions are enclosed in (. and .).
The operators + and - are used to form character sets.
2.2 Overall Structure
A Cocol/R compiler description has the following structure:
Cocol =
[Imports]
"COMPILER" ident
[GlobalFieldsAndMethods]
ScannerSpecification
ParserSpecification
"END" ident '.'
.
分享到:
相关推荐
通过深入学习和实践Coco/R,不仅可以掌握编译器的基本构造,还可以提升对编程语言本质的理解,对于提升软件开发能力具有深远意义。在编译原理的世界里,Coco/R 是一个值得探索的宝藏,等待着每一位有志于编译技术的...
Coco / S是一个编译器生成器,它采用纯EBNF语法文件并具有SAX样式回调API。 它是用Java编写的,并针对输入语法所描述的语言生成了Java扫描器(Lexer)和解析器。 Coco / S是Coco / R for Java的2010/11版本的分支。 ...
**Coco/R C++ 编译器生成器详解** Coco/R 是一款强大的源代码到源代码的编译器生成器,主要用于创建词法分析器(lexer)和语法解析器(parser)。它由挪威科技大学的 Kåre Nymark 开发,支持多种编程语言,包括C、...
信息技术 语法元语言 扩展的BNF标准(EBNF) 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用...
EBNF是一种形式语言,用于描述计算机语言的语法结构。 1. 介绍 EBNF是一种meta语言,用于定义编程语言的语法结构。它提供了一种通用的语法描述方法,能够描述各种编程语言的语法规则。 2. 范围 本标准适用于所有...
xalan java源码基于以下位置的...-DaddArgs=src/main/scala/ebnf/EBNFParser.scala 我在通过 SBT 手动运行它时遇到了问题,但在 CLI 上可以通过将 CLASSPATH 设置为: project/boot/scala-2.8.0/lib/scala-library.j
**Coco/R 语法支持与 Atom 集成详解** Coco/R,全称为 COmmon COde Generator/Rewriter,是一种编译器构造工具,主要用于生成解析器和语法分析器。它支持LL(1)、LR(0)、LALR(1)和LL(*)的语法,并可以进行源代码的...
表达式支持加法和减法操作。 ##### A.2 Conditional Directive Expression ABNF 对于条件指令表达式,其ABNF定义可能类似于: ``` conditional-directive-exp = "IF" "(" condition ")" "{" stmt "}" [ "ELSE" "{...
目前可用的插件类型有: 简单的 ASCII 图表,虽然目前没有 ditaa 提供的那么多功能目录树图通过指定 EBNF 的语法图(铁路图) 标识生成器Asciidia 可以直接生成 SVG 和 ImageMagick MVG 文件,它也可以利用 ...
在实际应用中,编写EBNF描述通常基于对特定语言特征的规格描述或示例。这一过程涉及以下步骤: 1. **理解需求**:首先明确需要描述的语言特征或语法结构。 2. **设计规则**:根据需求设计相应的EBNF规则。 3. *...
AWK 的优点在于其简洁的语法和对文本模式匹配的强大支持,这使得它成为处理文本文件的理想选择。通过 Y2L,开发者可以利用 AWK 的能力,高效地处理 Yacc 文件并生成格式化的输出。 **使用 Y2l-1.2** 在 `y2l-1.2` ...
在编译原理中,表达式分析是编译器前端的重要组成部分,主要负责将源代码中的数学或逻辑表达式转换成中间表示(如抽象语法树AST)。这个实验旨在让你理解和掌握如何设计并实现一个简单的表达式解析器。在这个过程中...
EBNF(Extended Backus-Naur Form,扩展巴科斯范式)是一种用于描述形式语言语法的形式化表示方法,尤其在编程语言设计、编译器构造和解析器生成领域广泛应用。EBNF比传统的巴科斯范式(BNF)更加灵活,能够更方便地...
Chevrotain既用作EBNF解析器的支持库,又用作目标语言的解析器。 因此必须熟悉Chevrotain。原料药EBNFParser类是从需要此模块收到的对象 let EBNFParser = require ( "chevrotain-ebnf" ) ; 要使用它,只需创建一个...
EBNF.Net是一个开源项目,其核心是为C#语言设计的一个EBNF(扩展巴科斯范式)文件解析器。EBNF是一种形式化的语法描述语言,常用于定义编程语言、标记语言和其他结构化文本的语法规则。这个解析器的主要功能是将EBNF...
`b.rar_verilog ebnf` 提供了一个关于如何使用递归下降分析(Recursive Descent Parsing)来处理Verilog语言文法规则的示例。下面我们将详细探讨递归下降分析、扩展巴科斯范式(EBNF)以及它们在Verilog中的应用。 ...
理解并实现一个表达式解析器是提升编程技能的重要步骤,它涉及到语言理论、编译原理以及对编程语言内部运作的深入理解。通过研究“Java编程艺术-表达式解析器.rar”中的代码,开发者可以学习到如何在Java环境中构建...
在IT领域,构建一个“四则运算表达式计算器”是一个基础但重要的任务,它涉及到编程语言中的算术运算、表达式解析以及错误处理等关键概念。这个计算器能够处理加法、减法、乘法和除法这四种基本的数学运算,并且具备...
在本项目中,我们关注的是一个基于Java语言编写的计算器表达式分析器,它涵盖了词法分析和语法分析的关键步骤。这两个概念是编译器设计和解析技术的基础,对于理解和处理计算机程序中的数学表达式至关重要。 1. **...