Skip to content

Commit

Permalink
Reformat grammar files
Browse files Browse the repository at this point in the history
  • Loading branch information
0x2a-42 committed May 29, 2024
1 parent 80c9a02 commit 02f7221
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 216 deletions.
17 changes: 4 additions & 13 deletions examples/calc/src/calc.llw
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,12 @@ skip Whitespace;

start calc;

calc:
expr
;
calc: expr;
expr:
expr ('*' | '/') expr
| expr ('+' | '-') expr
| atomic
;
atomic:
literal
| paren
;
literal:
Num
;
paren:
'(' expr ')'
;
atomic: literal | paren;
literal: Num;
paren: '(' expr ')';
16 changes: 4 additions & 12 deletions examples/json/src/json.llw
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,15 @@ skip Whitespace;

start file;

file:
value
;
file: value;
value:
object
| array
| literal
;
object:
'{' [member (',' member)*] '}'
;
member:
String ':' value
;
array:
'[' [value (',' value)*] ']'
;
object: '{' [member (',' member)*] '}';
member: String ':' value;
array: '[' [value (',' value)*] ']';
literal:
String
| Number
Expand Down
56 changes: 14 additions & 42 deletions examples/l/src/l.llw
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,22 @@ skip Whitespace;

start file;

file:
fn*
;
fn:
'fn' Name param_list ['->' type_expr] block
;
param_list:
'(' [param (?1 ',' param)* [',']] ')'
;
param:
Name ':' type_expr
;
type_expr:
Name
;
block:
'{' stmt* '}'
;
file: fn*;
fn: 'fn' Name param_list ['->' type_expr] block;
param_list: '(' [param (?1 ',' param)* [',']] ')';
param: Name ':' type_expr;
type_expr: Name;
block: '{' stmt* '}';
stmt:
stmt_expr
| stmt_let
| block
| stmt_return
;
stmt_expr:
expr ';'
;
stmt_let:
'let' Name '=' expr ';'
;
stmt_return:
'return' [expr] ';'
;
expr:
expr_bin
;
stmt_expr: expr ';';
stmt_let: 'let' Name '=' expr ';';
stmt_return: 'return' [expr] ';';
expr: expr_bin;
expr_bin:
expr_bin ('*' | '/') expr_bin
| expr_bin ('+' | '-') expr_bin
Expand All @@ -55,15 +35,7 @@ expr_call:
| expr_name
| expr_paren
;
arg_list:
'(' [expr (?1 ',' expr)* [',']] ')'
;
expr_literal:
Int | 'true' | 'false'
;
expr_name:
Name
;
expr_paren:
'(' expr ')'
;
arg_list: '(' [expr (?1 ',' expr)* [',']] ')';
expr_literal: Int | 'true' | 'false';
expr_name: Name;
expr_paren: '(' expr ')';
110 changes: 28 additions & 82 deletions examples/lua/src/lua.llw
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,8 @@ right '..';

start chunk;

chunk:
block
;
block:
stat* [retstat]
;
chunk: block;
block: stat* [retstat];
stat:
emptystat
| expstat
Expand All @@ -38,29 +34,15 @@ stat:
| funcstat
| localstat
;
emptystat:
';'
;
emptystat: ';';
/// superset of official grammar, check in cst that syntax is valid
expstat:
prefixexp [(',' prefixexp)* '=' explist @assignstat] @
;
expstat: prefixexp [(',' prefixexp)* '=' explist @assignstat] @;

breakstat:
'break'
;
gotostat:
'goto' Name
;
dostat:
'do' block 'end'
;
whilestat:
'while' exp 'do' block 'end'
;
repeatstat:
'repeat' block 'until' exp
;
breakstat: 'break';
gotostat: 'goto' Name;
dostat: 'do' block 'end';
whilestat: 'while' exp 'do' block 'end';
repeatstat: 'repeat' block 'until' exp;
ifstat:
'if' exp 'then' block
('elseif' exp 'then' block)*
Expand All @@ -71,43 +53,23 @@ forstat:
?1 Name '=' exp ',' exp [',' exp] 'do' block 'end' // resolve LL(1) conflict with extra lookahead
| namelist 'in' explist 'do' block 'end')
;
funcstat:
'function' funcname pars funcbody
;
funcstat: 'function' funcname pars funcbody;
localstat:
'local' (
'function' Name pars funcbody
| attnamelist ['=' explist]
)
;
attnamelist:
Name attrib (',' Name attrib)*
;
attrib:
['<' Name '>']
;
retstat:
'return' [explist] [';']
;
label:
'::' Name '::'
;
funcname:
Name ('.' Name)* [':' Name]
;
namelist:
Name (',' Name)* @
;
explist:
exp (',' exp)* @
;
// extra rule for better error handling
args_explist:
'(' [exp (',' exp)*] ')'
;
exp:
binexp
;
attnamelist: Name attrib (',' Name attrib)*;
attrib: ['<' Name '>'];
retstat: 'return' [explist] [';'];
label: '::' Name '::';
funcname: Name ('.' Name)* [':' Name];
namelist: Name (',' Name)* @;
explist: exp (',' exp)* @;
args_explist: '(' [exp (',' exp)*] ')'; // extra rule for better error handling

exp: binexp;
binexp:
binexp ('*' | '/' | '//' | '%') binexp
| binexp ('+' | '-') binexp
Expand Down Expand Up @@ -136,12 +98,8 @@ literalexp:
| Numeral
| LiteralString
;
nameexp:
Name
;
parenexp:
'(' exp ')'
;
nameexp: Name;
parenexp: '(' exp ')';
prefixexp:
prefixexp '[' exp ']' @indexexp
| prefixexp '.' Name @fieldexp
Expand All @@ -154,24 +112,12 @@ args:
| tableconstructor
| stringarg
;
stringarg:
LiteralString
;
functiondef:
'function' pars funcbody
;
pars:
'(' [Name (?1 ',' Name)* [',' '...'] | '...'] ')' // resolve LL(1) conflict with extra lookahead
;
funcbody:
block 'end'
;
tableconstructor:
'{' fieldlist '}'
;
fieldlist:
[field (?1 (',' | ';') field)* [',' | ';']] // resolve LL(1) conflict with extra lookahead
;
stringarg: LiteralString;
functiondef: 'function' pars funcbody;
pars: '(' [Name (?1 ',' Name)* [',' '...'] | '...'] ')'; // resolve LL(1) conflict with extra lookahead
funcbody: block 'end';
tableconstructor: '{' fieldlist '}';
fieldlist: [field (?1 (',' | ';') field)* [',' | ';']]; // resolve LL(1) conflict with extra lookahead
field:
'[' exp ']' '=' exp
| ?1 Name '=' exp // resolve LL(1) conflict with extra lookahead
Expand Down
42 changes: 12 additions & 30 deletions examples/oberon0/src/oberon0.llw
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ expression:
assignment_or_procedure_call:
Ident selector (':=' expression @assignment | [actual_parameters] @procedure_call)
;
actual_parameters:
'(' [expression (',' expression)*] ')'
;
actual_parameters: '(' [expression (',' expression)*] ')';
if_statement:
'IF' expression 'THEN' statement_sequence
('ELSIF' expression 'THEN' statement_sequence)*
Expand All @@ -49,33 +47,17 @@ repeat_statement:
statement:
[assignment_or_procedure_call | if_statement | while_statement | repeat_statement]
;
statement_sequence:
statement (';' statement)*
;
ident_list:
Ident (',' Ident)*
;
array_type:
'ARRAY' expression 'OF' type
;
field_list:
[ident_list ':' type]
;
record_type:
'RECORD' field_list (';' field_list)* 'END'
;
type:
Ident | array_type | record_type
;
fp_section:
['VAR'] ident_list ':' type
;
formal_parameters:
'(' [fp_section (';' fp_section)*] ')'
;
procedure_heading:
'PROCEDURE' Ident [formal_parameters]
;
statement_sequence: statement (';' statement)*;

ident_list: Ident (',' Ident)*;
array_type: 'ARRAY' expression 'OF' type;
field_list: [ident_list ':' type];
record_type: 'RECORD' field_list (';' field_list)* 'END';
type: Ident | array_type | record_type;

fp_section: ['VAR'] ident_list ':' type;
formal_parameters: '(' [fp_section (';' fp_section)*] ')';
procedure_heading: 'PROCEDURE' Ident [formal_parameters];
procedure_body:
declarations ['BEGIN' statement_sequence] 'END' Ident
;
Expand Down
Loading

0 comments on commit 02f7221

Please sign in to comment.