From 2027302cf1fe7a6144f78df3ae36b6886805f80a Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Thu, 26 Feb 2026 17:32:13 +0000 Subject: [PATCH] w1 done --- Hello.g4 | 3 +- Hello.interp | 18 +++++++++ Hello.tokens | 4 ++ HelloLexer.interp | 26 +++++++++++++ HelloLexer.py | 55 +++++++++++++++++++++++++++ HelloLexer.tokens | 4 ++ HelloListener.py | 21 +++++++++++ HelloParser.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++ main.py | 27 ++++++++++++++ srcfile.txt | 1 + 10 files changed, 251 insertions(+), 2 deletions(-) create mode 100644 Hello.interp create mode 100644 Hello.tokens create mode 100644 HelloLexer.interp create mode 100644 HelloLexer.py create mode 100644 HelloLexer.tokens create mode 100644 HelloListener.py create mode 100644 HelloParser.py create mode 100644 main.py create mode 100644 srcfile.txt diff --git a/Hello.g4 b/Hello.g4 index b241f24..bfb64a5 100644 --- a/Hello.g4 +++ b/Hello.g4 @@ -1,6 +1,5 @@ grammar Hello; -start : 'Hello' ID ; - +start : 'hello' ID ; ID : [a-zA-Z]+ ; WS : [ \t\r\n]+ -> skip ; diff --git a/Hello.interp b/Hello.interp new file mode 100644 index 0000000..1562c8a --- /dev/null +++ b/Hello.interp @@ -0,0 +1,18 @@ +token literal names: +null +'hello' +null +null + +token symbolic names: +null +null +ID +WS + +rule names: +start + + +atn: +[4, 1, 3, 6, 2, 0, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 4, 0, 2, 1, 0, 0, 0, 2, 3, 5, 1, 0, 0, 3, 4, 5, 2, 0, 0, 4, 1, 1, 0, 0, 0, 0] \ No newline at end of file diff --git a/Hello.tokens b/Hello.tokens new file mode 100644 index 0000000..090a996 --- /dev/null +++ b/Hello.tokens @@ -0,0 +1,4 @@ +T__0=1 +ID=2 +WS=3 +'hello'=1 diff --git a/HelloLexer.interp b/HelloLexer.interp new file mode 100644 index 0000000..c5ed873 --- /dev/null +++ b/HelloLexer.interp @@ -0,0 +1,26 @@ +token literal names: +null +'hello' +null +null + +token symbolic names: +null +null +ID +WS + +rule names: +T__0 +ID +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 3, 25, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 4, 1, 15, 8, 1, 11, 1, 12, 1, 16, 1, 2, 4, 2, 20, 8, 2, 11, 2, 12, 2, 21, 1, 2, 1, 2, 0, 0, 3, 1, 1, 3, 2, 5, 3, 1, 0, 2, 2, 0, 65, 90, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 26, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 1, 7, 1, 0, 0, 0, 3, 14, 1, 0, 0, 0, 5, 19, 1, 0, 0, 0, 7, 8, 5, 104, 0, 0, 8, 9, 5, 101, 0, 0, 9, 10, 5, 108, 0, 0, 10, 11, 5, 108, 0, 0, 11, 12, 5, 111, 0, 0, 12, 2, 1, 0, 0, 0, 13, 15, 7, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 16, 1, 0, 0, 0, 16, 14, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 4, 1, 0, 0, 0, 18, 20, 7, 1, 0, 0, 19, 18, 1, 0, 0, 0, 20, 21, 1, 0, 0, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 24, 6, 2, 0, 0, 24, 6, 1, 0, 0, 0, 3, 0, 16, 21, 1, 6, 0, 0] \ No newline at end of file diff --git a/HelloLexer.py b/HelloLexer.py new file mode 100644 index 0000000..8699829 --- /dev/null +++ b/HelloLexer.py @@ -0,0 +1,55 @@ +# Generated from ./Hello.g4 by ANTLR 4.13.2 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4,0,3,25,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,1,0,1,0,1,0,1,0,1,0,1,0,1, + 1,4,1,15,8,1,11,1,12,1,16,1,2,4,2,20,8,2,11,2,12,2,21,1,2,1,2,0, + 0,3,1,1,3,2,5,3,1,0,2,2,0,65,90,97,122,3,0,9,10,13,13,32,32,26,0, + 1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,1,7,1,0,0,0,3,14,1,0,0,0,5,19, + 1,0,0,0,7,8,5,104,0,0,8,9,5,101,0,0,9,10,5,108,0,0,10,11,5,108,0, + 0,11,12,5,111,0,0,12,2,1,0,0,0,13,15,7,0,0,0,14,13,1,0,0,0,15,16, + 1,0,0,0,16,14,1,0,0,0,16,17,1,0,0,0,17,4,1,0,0,0,18,20,7,1,0,0,19, + 18,1,0,0,0,20,21,1,0,0,0,21,19,1,0,0,0,21,22,1,0,0,0,22,23,1,0,0, + 0,23,24,6,2,0,0,24,6,1,0,0,0,3,0,16,21,1,6,0,0 + ] + +class HelloLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + T__0 = 1 + ID = 2 + WS = 3 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'hello'" ] + + symbolicNames = [ "", + "ID", "WS" ] + + ruleNames = [ "T__0", "ID", "WS" ] + + grammarFileName = "Hello.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/HelloLexer.tokens b/HelloLexer.tokens new file mode 100644 index 0000000..090a996 --- /dev/null +++ b/HelloLexer.tokens @@ -0,0 +1,4 @@ +T__0=1 +ID=2 +WS=3 +'hello'=1 diff --git a/HelloListener.py b/HelloListener.py new file mode 100644 index 0000000..20612a4 --- /dev/null +++ b/HelloListener.py @@ -0,0 +1,21 @@ +# Generated from ./Hello.g4 by ANTLR 4.13.2 +from antlr4 import * +if "." in __name__: + from .HelloParser import HelloParser +else: + from HelloParser import HelloParser + +# This class defines a complete listener for a parse tree produced by HelloParser. +class HelloListener(ParseTreeListener): + + # Enter a parse tree produced by HelloParser#start. + def enterStart(self, ctx:HelloParser.StartContext): + pass + + # Exit a parse tree produced by HelloParser#start. + def exitStart(self, ctx:HelloParser.StartContext): + pass + + + +del HelloParser \ No newline at end of file diff --git a/HelloParser.py b/HelloParser.py new file mode 100644 index 0000000..a3f300c --- /dev/null +++ b/HelloParser.py @@ -0,0 +1,94 @@ +# Generated from ./Hello.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +def serializedATN(): + return [ + 4,1,3,6,2,0,7,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,4,0,2,1,0,0,0,2,3,5, + 1,0,0,3,4,5,2,0,0,4,1,1,0,0,0,0 + ] + +class HelloParser ( Parser ): + + grammarFileName = "Hello.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'hello'" ] + + symbolicNames = [ "", "", "ID", "WS" ] + + RULE_start = 0 + + ruleNames = [ "start" ] + + EOF = Token.EOF + T__0=1 + ID=2 + WS=3 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class StartContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def ID(self): + return self.getToken(HelloParser.ID, 0) + + def getRuleIndex(self): + return HelloParser.RULE_start + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStart" ): + listener.enterStart(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStart" ): + listener.exitStart(self) + + + + + def start(self): + + localctx = HelloParser.StartContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_start) + try: + self.enterOuterAlt(localctx, 1) + self.state = 2 + self.match(HelloParser.T__0) + self.state = 3 + self.match(HelloParser.ID) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + + diff --git a/main.py b/main.py new file mode 100644 index 0000000..55503bf --- /dev/null +++ b/main.py @@ -0,0 +1,27 @@ +import sys + +from antlr4 import * +from HelloLexer import HelloLexer +from HelloParser import HelloParser +from HelloListener import HelloListener + +from antlr4.tree.Trees import Trees + + +def main(argv): + if len(argv) == 1: + InputStream = StdinStream() + else: + inpname = argv[1] + InputStream = FileStream(inpname) + lexer = HelloLexer(InputStream) + tokstream = CommonTokenStream(lexer) + parser = HelloParser(tokstream) + + tree = parser.start() + + print(Trees.toStringTree(tree, None, parser)) +if __name__ == '__main__': + main(sys.argv) + + diff --git a/srcfile.txt b/srcfile.txt new file mode 100644 index 0000000..24f29e9 --- /dev/null +++ b/srcfile.txt @@ -0,0 +1 @@ +hello marvin \ No newline at end of file