Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pybison
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
pybison
Commits
858c8461
Commit
858c8461
authored
Nov 21, 2011
by
Sander Mathijs van Veen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed compilation warning and removed useless LEO comments.
parent
f1e152a6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
36 additions
and
56 deletions
+36
-56
src/c/bisondynlib-linux.c
src/c/bisondynlib-linux.c
+3
-8
src/c/bisondynlib.h
src/c/bisondynlib.h
+1
-6
src/pyrex/bison_.pyx
src/pyrex/bison_.pyx
+13
-4
src/python/bison.py
src/python/bison.py
+19
-38
No files found.
src/c/bisondynlib-linux.c
View file @
858c8461
//@+leo-ver=4
//@+node:@file src/c/bisondynlib-linux.c
//@@language c
/*
* Linux-specific dynamic library manipulation routines
*/
#include <stdio.h>
#include "bisondynlib.h"
#include <stdio.h>
#include <dlfcn.h>
void
*
bisondynlib_open
(
char
*
filename
)
...
...
@@ -41,7 +38,7 @@ char *bisondynlib_lookup_hash(void *handle)
PyObject
*
bisondynlib_run
(
void
*
handle
,
PyObject
*
parser
,
void
*
cb
,
void
*
in
,
int
debug
)
{
void
(
*
pparser
)(
PyObject
*
,
void
*
,
void
*
,
int
);
PyObject
*
(
*
pparser
)(
PyObject
*
,
void
*
,
void
*
,
int
);
//PyObject *result;
//printf("bisondynlib_run: looking up parser\n");
...
...
@@ -54,6 +51,7 @@ PyObject *bisondynlib_run(void *handle, PyObject *parser, void *cb, void *in, in
}
(
*
pparser
)(
parser
,
cb
,
in
,
debug
);
//printf("bisondynlib_run: back from parser\n");
//return result;
Py_INCREF
(
Py_None
);
...
...
@@ -83,6 +81,3 @@ int bisondynlib_build(char *libName, char *pyincdir)
return 0;
}
*/
//@-node:@file src/c/bisondynlib-linux.c
//@-leo
src/c/bisondynlib.h
View file @
858c8461
//@+leo-ver=4
//@+node:@file src/c/bisondynlib.h
//@@language c
/*
* common interface to dynamic library routines
*/
#include <stdio.h>
#include "Python.h"
#include <stdio.h>
void
*
bisondynlib_open
(
char
*
filename
);
int
bisondynlib_close
(
void
*
handle
);
...
...
@@ -21,5 +18,3 @@ PyObject *bisondynlib_run(void *handle, PyObject *parser, void *cb, void *in, in
/*
int bisondynlib_build(char *libName, char *pyincdir);
*/
//@-node:@file src/c/bisondynlib.h
//@-leo
src/pyrex/bison_.pyx
View file @
858c8461
...
...
@@ -60,7 +60,7 @@ cdef extern from "stdarg.h":
pass
ctypedef
struct
fake_type
:
pass
void
va_start
(
va_list
,
void
*
arg
)
void
va_start
(
va_list
,
int
arg
)
void
*
va_arg
(
va_list
,
fake_type
)
void
va_end
(
va_list
)
fake_type
void_type
"void *"
...
...
@@ -69,12 +69,14 @@ cdef extern from "stdarg.h":
# Callback function which is invoked by target handlers
# within the C yyparse() function.
import
signal
cdef
public
object
py_callback
(
object
parser
,
char
*
target
,
int
option
,
\
int
nargs
,
...):
cdef
int
i
cdef
va_list
ap
va_start
(
ap
,
<
void
*
>
nargs
)
va_start
(
ap
,
<
int
>
nargs
)
cdef
void
*
objptr
cdef
object
obj
...
...
@@ -111,8 +113,15 @@ cdef public object py_callback(object parser, char *target, int option, \
# print 'py_callback: calling handler:', \
# (target, option, names, values)
# Set the signal handler and a timeout alarm
signal
.
signal
(
signal
.
SIGALRM
,
parser
.
handle_timeout
)
signal
.
alarm
(
parser
.
timeout
)
res
=
parser
.
_handle
(
target
,
option
,
names
,
values
)
signal
.
alarm
(
0
)
#if parser.verbose:
# print 'py_callback: handler returned:', res
except
:
...
...
@@ -176,7 +185,7 @@ cdef class ParserEngine:
# rules hash str embedded in bison parser lib
cdef
char
*
libHash
def
__init__
(
self
,
parser
,
**
kw
):
def
__init__
(
self
,
parser
):
"""
Creates a ParserEngine wrapper, and builds/loads the library.
...
...
@@ -319,8 +328,8 @@ cdef class ParserEngine:
write
(
"
\
n
"
.
join
([
"%{"
,
''
,
"#include <stdio.h>"
,
'#include "Python.h"'
,
"#include <stdio.h>"
,
"extern FILE *yyin;"
,
"extern int yylineno;"
"extern char *yytext;"
,
...
...
src/python/bison.py
View file @
858c8461
...
...
@@ -31,12 +31,15 @@ from bison_ import ParserEngine, unquoted
#@+node:globals
reSpaces
=
re
.
compile
(
"
\
\
s+"
)
#@-node:globals
#@+node:exceptions
class
ParserSyntaxError
(
Exception
):
pass
#@-node:exceptions
#@+node:class BisonError
class
TimeoutError
(
Exception
):
pass
class
BisonError
:
"""
Flags an error to yyparse()
...
...
@@ -47,8 +50,8 @@ class BisonError:
def
__init__
(
self
,
value
=
"syntax error"
):
self
.
value
=
value
#@-node:class BisonError
#@+node:class BisonNode
class
BisonNode
:
"""
Generic class for wrapping parse targets.
...
...
@@ -63,8 +66,7 @@ class BisonNode:
- any keywords you want (except 'items'), with any type of value.
keywords will be stored as attributes in the constructed object.
"""
#@ @+others
#@+node:__init__
def
__init__
(
self
,
**
kw
):
self
.
__dict__
.
update
(
kw
)
...
...
@@ -78,18 +80,12 @@ class BisonNode:
# mirror this dict to simplify dumping
self
.
kw
=
kw
#@-node:__init__
#@+node:__str__
def
__str__
(
self
):
return
"<BisonNode:%s>"
%
self
.
target
#@-node:__str__
#@+node:__repr__
def
__repr__
(
self
):
return
str
(
self
)
#@-node:__repr__
#@+node:__getitem__
def
__getitem__
(
self
,
item
):
"""
Retrieves the ith value from this node, or child nodes
...
...
@@ -110,21 +106,17 @@ class BisonNode:
return
self
.
values
[
item
[
0
]][
item
[
1
:]]
else
:
raise
TypeError
(
"Can only index %s objects with an int or a list/tuple"
%
self
.
__class
.
__name__
)
#@-node:__getitem__
#@+node:__len__
def
__len__
(
self
):
return
len
(
self
.
values
)
#@-node:__len__
#@+node:__getslice__
def
__getslice__
(
self
,
fromidx
,
toidx
):
return
self
.
values
[
fromidx
:
toidx
]
#@-node:__getslice__
#@+node:__iter__
def
__iter__
(
self
):
return
iter
(
self
.
values
)
#@-node:__iter__
#@+node:dump
def
dump
(
self
,
indent
=
0
):
"""
For debugging - prints a recursive dump of a parse tree node and its children
...
...
@@ -142,8 +134,6 @@ class BisonNode:
else
:
print
indents
+
" %s=%s"
%
(
name
,
val
)
#@-node:dump
#@+node:toxml
def
toxml
(
self
):
"""
Returns an xml serialisation of this node and its children, as a raw string
...
...
@@ -153,8 +143,6 @@ class BisonNode:
"""
return
self
.
toxmldoc
().
toxml
()
#@-node:toxml
#@+node:toprettyxml
def
toprettyxml
(
self
,
indent
=
' '
,
newl
=
'
\
n
'
,
encoding
=
None
):
"""
returns a human-readable xml serialisation of this node and its children
...
...
@@ -163,8 +151,6 @@ class BisonNode:
newl
=
newl
,
encoding
=
encoding
)
#@-node:toprettyxml
#@+node:toxmldoc
def
toxmldoc
(
self
):
"""
Returns the node and its children as an xml.dom.minidom.Document object
...
...
@@ -173,8 +159,6 @@ class BisonNode:
d
.
appendChild
(
self
.
toxmlelem
(
d
))
return
d
#@-node:toxmldoc
#@+node:toxmlelem
def
toxmlelem
(
self
,
docobj
):
"""
Returns a DOM Element object of this node and its children
...
...
@@ -209,10 +193,6 @@ class BisonNode:
return
x
#@-node:toxmlelem
#@-others
#@-node:class BisonNode
#@+node:class BisonParser
class
BisonParser
(
object
):
"""
Base parser class
...
...
@@ -221,8 +201,6 @@ class BisonParser(object):
'on_TargetName', where 'TargetName' is the name of each target in
your grammar (.y) file.
"""
#@ @+others
#@+node:attributes
# ---------------------------------------
# override these if you need to
...
...
@@ -250,6 +228,8 @@ class BisonParser(object):
verbose
=
0
timeout
=
1
# Timeout in seconds after which a computation is terminated.
file
=
None
# default to sys.stdin
last
=
None
# last parsed target, top of parse tree
...
...
@@ -262,8 +242,6 @@ class BisonParser(object):
defaultNodeClass
=
BisonNode
# class to use by default for creating new parse nodes
#@-node:attributes
#@+node:__init__
def
__init__
(
self
,
**
kw
):
"""
Abstract representation of parser
...
...
@@ -351,6 +329,9 @@ class BisonParser(object):
# assumedly the last thing parsed is at the top of the tree
return
self
.
last
def
handle_timeout
(
self
,
signum
,
frame
):
raise
TimeoutError
(
'Computation exceeded timeout limit.'
)
def
run
(
self
,
**
kw
):
"""
Runs the parser, and returns the top-most parse target.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment