-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathast2j.ast
More file actions
52 lines (41 loc) · 1.72 KB
/
Copy pathast2j.ast
File metadata and controls
52 lines (41 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* AST2J : A simple visitor generator for Java
* Copyright (c) 2000-2017 Takuo Watanabe <takuo@acm.org>
*/
/*
* AST Definitions for AST2J
*
* Concrete Syntax for AST Definitions
* Input ::= { Command | Definition }
* Definition ::= AliasDef | SyntaxDef
* AliasDef ::= Name '=' Type
* SyntaxDef ::= Name '::=' NodeDef { '|' NodeDef }
* NodeDef ::= Name [ '(' [ FieldDef { ',' FieldDef }] ')' ]
* FieldDef ::= Name ':' Type
* Type ::= Name | Type '[]'
* Command ::= '#' Name CommandArg
* CommandArg ::= Name | Number | String
*/
#author "Takuo Watanabe (takuo@acm.org)" // author of this AST definition
#version "1.0" // version of this AST definition
#package "jp.ac.titech.c.psg.ast2j" // package of generated Java classes
#root AST // Java class name of the root AST node
#generate_root yes // if yes, the root AST node class is generated
#visitor ASTVisitor // visitor (abstract) class name
#use_lineno no
Name = String // type aliasing
DefinitionAST ::= AliasDefAST (name: Name, type: TypeAST)
| SyntaxDefAST (name: Name, defs: NodeDefAST[])
NodeDefAST ::= CNodeDefAST | ANodeDefAST
CNodeDefAST ::= CNodeDefAST (name: Name, fields: FieldDefAST[])
ANodeDefAST ::= ANodeDefAST (name: Name)
// For NodeDefAST, CNodeDefAST and ANodeDefAST, you can also write as:
// NodeDefAST ::= CNodeDefAST (name: Name, fields: FieldDefAST[])
// | ANodeDefAST (name: Name)
FieldDefAST ::= FieldDefAST (var: Name, type: TypeAST)
TypeAST ::= PrimTypeAST (name: Name)
| ArrayTypeAST (elem: TypeAST)
/*
* The Java source files of the AST classes were actually generated
* from this AST definition.
*/