From b35a7c9822f2c88388c80be9788beb9fe3f7760e Mon Sep 17 00:00:00 2001 From: channa Date: Sun, 21 Jan 2024 15:53:40 +0100 Subject: [PATCH] Added keyword reservation to Syntax --- src/main/rascal/Syntax.rsc | 19 +++++++++++++------ src/main/rascal/Test.rsc | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/rascal/Syntax.rsc b/src/main/rascal/Syntax.rsc index c6fbdc7..572b7c5 100644 --- a/src/main/rascal/Syntax.rsc +++ b/src/main/rascal/Syntax.rsc @@ -1,7 +1,6 @@ module Syntax extend lang::std::Whitespace; -extend lang::std::Id; extend lang::std::ASCII; /* @@ -108,7 +107,7 @@ syntax Lhs = Id ("[" Expr "]")? syntax SubProgCall = 'readln'"(" LhsList ")" | 'writeln'"(" ExprList ")" - > Id \ 'writeln' \ 'readln' \ 'skip' ("(" ExprList ")")? + > Id ("(" ExprList ")")? ; syntax ExprList = Expr ("," Expr)* @@ -138,10 +137,18 @@ syntax Expr = "(" Expr ")" /* Basic lexical constructs. */ -lexical Relop = "\<"|"\<="|"\>"|"\>="|"="|"\<\>"; -lexical Number = Digit+ - | Digit* "." Digit+ - ; +keyword Reserved = 'program' | 'const' | 'var' | 'array' | 'of' | 'integer' + | 'real' | 'function' | 'procedure' | 'begin' | 'end' + | 'skip' | 'if' | 'then' | 'else' | 'while' | 'do' | 'not' + | 'or' | 'and' | 'readln' | 'writeln' + ; +lexical Id = ([a-z A-Z 0-9 _] !<< [a-z A-Z][a-z A-Z 0-9 _]* !>> [a-z A-Z 0-9 _]) \ Reserved + ; + +lexical Relop = "\<"|"\<="|"\>"|"\>="|"="|"\<\>"; +lexical Number = Digit+ + | Digit* "." Digit+ + ; /* A comment is anything between a "{" and a "}" */ diff --git a/src/main/rascal/Test.rsc b/src/main/rascal/Test.rsc index 740338a..a9b53a0 100644 --- a/src/main/rascal/Test.rsc +++ b/src/main/rascal/Test.rsc @@ -1,6 +1,7 @@ module Test import ParseTree; +import Exception; import Syntax; import IO; @@ -17,9 +18,8 @@ void main() { */ start[Program] runSyntaxTestOn(loc file) { println("Parsing: "); - pt = parse(#start[Program], file); - - return pt; + return parse(#start[Program], file); + } list[loc] getFilesIn(loc dir) {