aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-03-14 00:02:44 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2014-03-14 00:02:44 +0200
commitcddb5b7bcb64e530fad5e8940761f62d741957de (patch)
tree3270d805c8e67bdca2fca9c769d5255342a45928
parent8c14ead3ed32b7a5fe113d70386ea7a53d51c779 (diff)
downloadmeson-cddb5b7bcb64e530fad5e8940761f62d741957de.zip
meson-cddb5b7bcb64e530fad5e8940761f62d741957de.tar.gz
meson-cddb5b7bcb64e530fad5e8940761f62d741957de.tar.bz2
Now parses a lot more.
-rwxr-xr-xparsertest.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/parsertest.py b/parsertest.py
index 9e8fdfa..a933117 100755
--- a/parsertest.py
+++ b/parsertest.py
@@ -52,7 +52,7 @@ class Lexer:
('lparen', re.compile(r'\(')),
('rparen', re.compile(r'\)')),
('lbracket', re.compile(r'\[')),
- ('lbracket', re.compile(r'\]')),
+ ('rbracket', re.compile(r'\]')),
('string', re.compile("'[^']*?'")),
('comma', re.compile(r',')),
('dot', re.compile(r'\.')),
@@ -142,6 +142,12 @@ class StringNode:
self.value = token.value
assert(isinstance(self.value, str))
+class ArrayNode:
+ def __init__(self, args):
+ self.lineno = args.lineno
+ self.colno = args.colno
+ self.args = args
+
class EmptyNode:
def __init__(self):
self.lineno = 0
@@ -351,10 +357,14 @@ class Parser:
return left
def e7(self):
- if self.accept('('):
+ if self.accept('lparen'):
e = self.expression()
- self.expect(')')
+ self.expect('rparen')
return e
+ elif self.accept('lbracket'):
+ args = self.args()
+ self.expect('rbracket')
+ return ArrayNode(args)
else:
return self.e8()
@@ -403,7 +413,10 @@ class Parser:
self.expect('lparen')
args = self.args()
self.expect('rparen')
- return MethodNode(methodname.lineno, methodname.colno, source_object, methodname.value, args)
+ method = MethodNode(methodname.lineno, methodname.colno, source_object, methodname.value, args)
+ if self.accept('dot'):
+ return self.method_call(method)
+ return method
def ifblock(self):
condition = self.statement()