~washort/pymeta/ometa-2

« back to all changes in this revision

Viewing changes to pymeta/grammar.py

  • Committer: Allen Short
  • Date: 2009-11-10 06:40:06 UTC
  • mfrom: (43.2.9 error-reporting)
  • Revision ID: washort@allen-shorts-macbook-pro.local-20091110064006-og3a54tl6z0yyi75
MergeĀ "error-reporting"

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
import string
6
6
from builder import TreeBuilder, moduleFromGrammar
7
7
from boot import BootOMetaGrammar
8
 
from runtime import OMetaBase, ParseError
 
8
from runtime import OMetaBase, ParseError, EOFError
9
9
 
10
10
class OMeta(OMetaBase):
11
11
    """
119
119
        (interface to be explicitly defined later)
120
120
        """
121
121
        self.builder = builder(name, self, *args)
122
 
        res = self.apply("grammar")
 
122
        res, err = self.apply("grammar")
123
123
        try:
124
124
            x = self.input.head()
125
 
        except IndexError:
 
125
        except EOFError:
126
126
            pass
127
127
        else:
128
128
            x = repr(''.join(self.input.data[self.input.position:]))
138
138
        args = []
139
139
        while True:
140
140
            try:
141
 
                arg, endchar = self.pythonExpr(" >")
 
141
                (arg, endchar), err = self.pythonExpr(" >")
142
142
                if not arg:
143
143
                    break
144
144
                args.append(self.builder.expr(arg))
156
156
        Find and generate code for a Python expression terminated by a close
157
157
        paren/brace or end of line.
158
158
        """
159
 
        expr, endchar = self.pythonExpr(endChars="\r\n)]")
 
159
        (expr, endchar), err = self.pythonExpr(endChars="\r\n)]")
160
160
        if str(endchar) in ")]":
161
161
            self.input = self.input.prev()
162
162
        return self.builder.expr(expr)
166
166
        Find and generate code for a Python expression terminated by a
167
167
        close-paren, whose return value is ignored.
168
168
        """
169
 
        return self.builder.action(self.pythonExpr(')')[0])
 
169
        return self.builder.action(self.pythonExpr(')')[0][0])
170
170
 
171
171
    def semanticPredicateExpr(self):
172
172
        """
174
174
        close-paren, whose return value determines the success of the pattern
175
175
        it's in.
176
176
        """
177
 
        expr = self.builder.expr(self.pythonExpr(')')[0])
 
177
        expr = self.builder.expr(self.pythonExpr(')')[0][0])
178
178
        return self.builder.pred(expr)
179
179
 
180
180
OMeta.metagrammarClass = OMetaGrammar