https://github.com/youseftareq33/java_compiler_1_modula-2_syntaxcheck
Check Syntax Of MODULA-2 Programming Language Using LL(1) Predictive Parser
https://github.com/youseftareq33/java_compiler_1_modula-2_syntaxcheck
compiler java javafx ll1-parser modula2
Last synced: 3 months ago
JSON representation
Check Syntax Of MODULA-2 Programming Language Using LL(1) Predictive Parser
- Host: GitHub
- URL: https://github.com/youseftareq33/java_compiler_1_modula-2_syntaxcheck
- Owner: youseftareq33
- Created: 2024-07-17T20:06:06.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-18T17:38:40.000Z (about 2 years ago)
- Last Synced: 2025-06-02T01:41:55.029Z (about 1 year ago)
- Topics: compiler, java, javafx, ll1-parser, modula2
- Language: Java
- Homepage:
- Size: 359 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MODULA-2 Programming Language Syntax Check
## Description:
This project involves developing an LL(1) predictive parser for a subset of the MODULA-2 programming language.
The goal is to implement a parser in Java that can read, tokenize, and parse source code written in this subset of MODULA-2, ensuring that the code adheres to the given grammar rules.
The parser will use an LL(1) parsing table to guide the parsing process.
## Grammer Rules:
module-decl --> module-heading declarations block name .
module-heading --> **module** name ;
block --> **begin** stmt-list **end**
declarations --> const-decl var-decl procedure-decl
const-decl --> **const** const-list | lambda
const-list --> name = value ; const-list | lambda
var-decl --> **var** var-list | lambda
var-list --> var-item ; var-list | lambda
var-item --> name-list : data-type
name-list --> name more-names
more-names --> , name-list | lambda
data-type --> **integer** | **real** | **char**
procedure-decl --> procedure-heading declarations block name ; procedure-decl | lambda
procedure-heading --> **procedure** name ;
stmt-list --> statement ; stmt-list | lambda
statement --> ass-stmt | read-stmt | write-stmt | if-stmt | while-stmt | loop-stmt | exit-stmt | call-stmt | block | lambda
ass-stmt --> name := exp
exp --> term exp-prime
exp-prime --> add-oper term exp-prime | lambda
term --> factor term-prime
term-prime --> mul-oper factor term-prime | lambda
factor --> ( exp ) | name-value
add-oper --> + | -
mul-oper --> * | / | **mod** | **div**
read-stmt --> **readint** ( name-list ) | **readreal** ( name-list ) | **readchar** ( name-list ) | **readln**
write-stmt --> **writeint** ( write-list ) | **writereal** ( write-list ) | **writechar** ( write-list ) | **writeln**
write-list --> write-item more-write-value
more-write-value --> , write-list | lambda
write-item --> name | value
if-stmt --> **if** condition **then** stmt-list else-part **end**
else-part --> **else** stmt-list | lambda
while-stmt --> **while** condition **do** stmt-list **end**
loop-stmt --> **loop** stmt-list **until** condition
exit-stmt --> **exit**
call-stmt --> **call** name
condition --> name-value relational-oper name-value
relational-oper --> = | |= | < | <= | > | >=
name-value --> name | value
value --> integer-value | real-value
### Note:
- name is generated by the regular expression: letter ( letter | digit )*
- integer-value is generated by the regular expression: digit ( digit )*
- real-value is generated by the regular expression: digit ( digit )*.digit ( digit )*
- The tokens in **bold** are reserved words or standard identifiers (library functions or procedures).
- There is app_photo folder