parser: return AST in list form
This is the format the rest of the system uses anyway.
diff --git a/loxi_front_end/parser.py b/loxi_front_end/parser.py
index d79dd3c..73135ff 100644
--- a/loxi_front_end/parser.py
+++ b/loxi_front_end/parser.py
@@ -71,4 +71,11 @@
grammar.ignore(P.cppStyleComment)
def parse(src):
- return grammar.parseString(src, parseAll=True)
+ """
+ Given an input string, return the AST.
+
+ The AST is a low-level representation of the input. It changes frequently
+ with the input file syntax. The frontend.py module transforms the AST
+ into the OFInput represntation.
+ """
+ return grammar.parseString(src, parseAll=True).asList()
diff --git a/utest/test_parser.py b/utest/test_parser.py
index 89dae10..749e530 100755
--- a/utest/test_parser.py
+++ b/utest/test_parser.py
@@ -36,7 +36,7 @@
struct foo { };
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['struct', 'foo', []]])
+ self.assertEquals(ast, [['struct', 'foo', []]])
def test_one_field(self):
src = """\
@@ -45,7 +45,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo', [['uint32_t', 'bar']]]])
def test_multiple_fields(self):
@@ -57,7 +57,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo',
[['uint32_t', 'bar'],
['uint8_t', 'baz'],
@@ -70,7 +70,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo', [['uint32_t[4]', 'bar']]]])
def test_list_type(self):
@@ -80,7 +80,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo', [['list(of_action_t)', 'bar']]]])
class EnumTests(unittest.TestCase):
@@ -90,7 +90,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['enum', 'foo', []]])
+ self.assertEquals(ast, [['enum', 'foo', []]])
def test_one(self):
src = """\
@@ -99,7 +99,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['enum', 'foo', [['BAR', 1]]]])
+ self.assertEquals(ast, [['enum', 'foo', [['BAR', 1]]]])
def test_multiple(self):
src = """\
@@ -110,7 +110,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['enum', 'foo', [['OFP_A', 1], ['OFP_B', 2], ['OFP_C', 3]]]])
+ self.assertEquals(ast, [['enum', 'foo', [['OFP_A', 1], ['OFP_B', 2], ['OFP_C', 3]]]])
def test_trailing_comma(self):
src = """\
@@ -121,7 +121,7 @@
};
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['enum', 'foo', [['OFP_A', 1], ['OFP_B', 2], ['OFP_C', 3]]]])
+ self.assertEquals(ast, [['enum', 'foo', [['OFP_A', 1], ['OFP_B', 2], ['OFP_C', 3]]]])
class TestMetadata(unittest.TestCase):
def test_version(self):
@@ -129,7 +129,7 @@
#version 1
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(), [['metadata', 'version', '1']])
+ self.assertEquals(ast, [['metadata', 'version', '1']])
class TestToplevel(unittest.TestCase):
def test_multiple_structs(self):
@@ -138,7 +138,7 @@
struct bar { };
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo', []], ['struct', 'bar', []]])
def test_comments(self):
@@ -152,7 +152,7 @@
// comment 4
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['struct', 'foo', [['uint32_t', 'a']]]])
def test_mixed(self):
@@ -163,7 +163,7 @@
struct bar { };
"""
ast = parser.parse(src)
- self.assertEquals(ast.asList(),
+ self.assertEquals(ast,
[['metadata', 'version', '1'],
['struct', 'foo', []],
['metadata', 'version', '2'],