`
deepfuture
  • 浏览: 4397783 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80025
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69997
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103284
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285619
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67492
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32099
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45965
社区版块
存档分类
最新评论

coco/r笔记-对unicode支持及EBNF表达式

阅读更多

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/R 是一个值得探索的宝藏,等待着每一位有志于编译技术的...

    Coco/S Parser Generator:基于Coco / R的解析器生成器-开源

    Coco / S是一个编译器生成器,它采用纯EBNF语法文件并具有SAX样式回调API。 它是用Java编写的,并针对输入语法所描述的语言生成了Java扫描器(Lexer)和解析器。 Coco / S是Coco / R for Java的2010/11版本的分支。 ...

    coco-r-cpp:我的C ++ CocoR编译器生成器镜像

    **Coco/R C++ 编译器生成器详解** Coco/R 是一款强大的源代码到源代码的编译器生成器,主要用于创建词法分析器(lexer)和语法解析器(parser)。它由挪威科技大学的 Kåre Nymark 开发,支持多种编程语言,包括C、...

    ISO_IEC_14977_1996(E) 信息技术 语法元语言 扩展的BNF标准(EBNF) .pdf

    信息技术 语法元语言 扩展的BNF标准(EBNF) 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用...

    iso-14977-EBNF.pdf

    EBNF是一种形式语言,用于描述计算机语言的语法结构。 1. 介绍 EBNF是一种meta语言,用于定义编程语言的语法结构。它提供了一种通用的语法描述方法,能够描述各种编程语言的语法规则。 2. 范围 本标准适用于所有...

    xalanjava源码-SyntaxDiagramGenerator:Scala2.8的语法图生成插件,基于http://blog.32lea

    xalan java源码基于以下位置的...-DaddArgs=src/main/scala/ebnf/EBNFParser.scala 我在通过 SBT 手动运行它时遇到了问题,但在 CLI 上可以通过将 CLASSPATH 设置为: project/boot/scala-2.8.0/lib/scala-library.j

    language-cocor:CocoR 的 Atom 语法支持

    **Coco/R 语法支持与 Atom 集成详解** Coco/R,全称为 COmmon COde Generator/Rewriter,是一种编译器构造工具,主要用于生成解析器和语法分析器。它支持LL(1)、LR(0)、LALR(1)和LL(*)的语法,并可以进行源代码的...

    edk2-MetaDataExpressionSyntaxSpecification-release-1.30

    表达式支持加法和减法操作。 ##### A.2 Conditional Directive Expression ABNF 对于条件指令表达式,其ABNF定义可能类似于: ``` conditional-directive-exp = "IF" "(" condition ")" "{" stmt "}" [ "ELSE" "{...

    asciidia:从简单的 ASCII 图表、EBNF 符号等创建 SVG 或位图

    目前可用的插件类型有: 简单的 ASCII 图表,虽然目前没有 ditaa 提供的那么多功能目录树图通过指定 EBNF 的语法图(铁路图) 标识生成器Asciidia 可以直接生成 SVG 和 ImageMagick MVG 文件,它也可以利用 ...

    EBNF英文版讲义

    在实际应用中,编写EBNF描述通常基于对特定语言特征的规格描述或示例。这一过程涉及以下步骤: 1. **理解需求**:首先明确需要描述的语言特征或语法结构。 2. **设计规则**:根据需求设计相应的EBNF规则。 3. *...

    Y2L:Yacc-to-Latex 漂亮的打印机/转换器-开源

    AWK 的优点在于其简洁的语法和对文本模式匹配的强大支持,这使得它成为处理文本文件的理想选择。通过 Y2L,开发者可以利用 AWK 的能力,高效地处理 Yacc 文件并生成格式化的输出。 **使用 Y2l-1.2** 在 `y2l-1.2` ...

    编译原理实验 分析表达式

    在编译原理中,表达式分析是编译器前端的重要组成部分,主要负责将源代码中的数学或逻辑表达式转换成中间表示(如抽象语法树AST)。这个实验旨在让你理解和掌握如何设计并实现一个简单的表达式解析器。在这个过程中...

    EBNF-源码.rar

    EBNF(Extended Backus-Naur Form,扩展巴科斯范式)是一种用于描述形式语言语法的形式化表示方法,尤其在编程语言设计、编译器构造和解析器生成领域广泛应用。EBNF比传统的巴科斯范式(BNF)更加灵活,能够更方便地...

    chevrotain-ebnf:Chevrotain LexerParser将EBNF转换为Chevrotain LexerParser

    Chevrotain既用作EBNF解析器的支持库,又用作目标语言的解析器。 因此必须熟悉Chevrotain。原料药EBNFParser类是从需要此模块收到的对象 let EBNFParser = require ( "chevrotain-ebnf" ) ; 要使用它,只需创建一个...

    EBNF.Net-开源

    EBNF.Net是一个开源项目,其核心是为C#语言设计的一个EBNF(扩展巴科斯范式)文件解析器。EBNF是一种形式化的语法描述语言,常用于定义编程语言、标记语言和其他结构化文本的语法规则。这个解析器的主要功能是将EBNF...

    b.rar_verilog ebnf

    `b.rar_verilog ebnf` 提供了一个关于如何使用递归下降分析(Recursive Descent Parsing)来处理Verilog语言文法规则的示例。下面我们将详细探讨递归下降分析、扩展巴科斯范式(EBNF)以及它们在Verilog中的应用。 ...

    Java编程艺术-表达式解析器.rar

    理解并实现一个表达式解析器是提升编程技能的重要步骤,它涉及到语言理论、编译原理以及对编程语言内部运作的深入理解。通过研究“Java编程艺术-表达式解析器.rar”中的代码,开发者可以学习到如何在Java环境中构建...

    四则运算表达式计算器

    在IT领域,构建一个“四则运算表达式计算器”是一个基础但重要的任务,它涉及到编程语言中的算术运算、表达式解析以及错误处理等关键概念。这个计算器能够处理加法、减法、乘法和除法这四种基本的数学运算,并且具备...

    基于Java语言编写的计算器表达式分析器其中包括词法分析和语法分析部分.zip

    在本项目中,我们关注的是一个基于Java语言编写的计算器表达式分析器,它涵盖了词法分析和语法分析的关键步骤。这两个概念是编译器设计和解析技术的基础,对于理解和处理计算机程序中的数学表达式至关重要。 1. **...

Global site tag (gtag.js) - Google Analytics