1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
indexing
description:
"Lace parser skeletons"
author: "Eric Bezault <ericb@gobosoft.com>"
copyright: "Copyright (c) 1999-2001, Eric Bezault and others"
license: "Eiffel Forum Freeware License v1 (see forum.txt)"
date: "$Date: 2001/01/08 19:38:09 $"
revision: "$Revision: 1.2 $"
deferred class ET_LACE_PARSER_SKELETON
inherit
YY_PARSER_SKELETON [ANY]
rename
make as make_parser_skeleton,
parse as yyparse
redefine
report_error
end
ET_LACE_SCANNER_SKELETON
rename
make as make_lace_scanner
end
feature {NONE} -- Initialization
make (an_error_handler: like error_handler) is
-- Create a new Lace parser.
require
an_error_handler_not_void: an_error_handler /= Void
local
a_factory: ET_AST_FACTORY
do
!! a_factory.make
make_with_factory (a_factory, an_error_handler)
ensure
error_handler_set: error_handler = an_error_handler
end
make_with_factory (a_factory: like ast_factory; an_error_handler: like error_handler) is
-- Create a new Lace parser.
require
a_factory_not_void: a_factory /= Void
an_error_handler_not_void: an_error_handler /= Void
do
ast_factory := a_factory
make_lace_scanner ("unknown file", an_error_handler)
make_parser_skeleton
ensure
ast_factory_set: ast_factory = a_factory
error_handler_set: error_handler = an_error_handler
end
feature -- Parsing
parse (a_file: like INPUT_STREAM_TYPE) is
-- Parse Ace file `a_file'.
require
a_file_not_void: a_file /= Void
a_file_open_read: INPUT_STREAM_.is_open_read (a_file)
do
reset
set_input_buffer (new_file_buffer (a_file))
last_universe := Void
yyparse
end
feature -- Access
last_universe: ET_UNIVERSE
-- Universe being parsed
ast_factory: ET_AST_FACTORY
-- Abstract Syntax Tree factory
feature -- AST factory
new_cluster (a_name: ET_IDENTIFIER; a_pathname: ET_IDENTIFIER): ET_CLUSTER is
-- New cluster
require
a_name_not_void: a_name /= Void
do
!! Result.make (a_name, a_pathname)
ensure
cluster_not_void: Result /= Void
end
new_clusters (a_cluster: ET_CLUSTER): ET_CLUSTERS is
-- New cluster list
require
a_cluster_not_void: a_cluster /= Void
do
!! Result.make (a_cluster)
ensure
clusters_not_void: Result /= Void
end
new_universe (a_clusters: ET_CLUSTERS): ET_UNIVERSE is
-- New class universe
do
!! Result.make (a_clusters, ast_factory, error_handler)
ensure
universe_not_void: Result /= Void
end
feature -- Error handling
report_error (a_message: STRING) is
-- Print error message.
local
f_buffer: YY_FILE_BUFFER
do
f_buffer ?= input_buffer
if f_buffer /= Void then
std.error.put_string (INPUT_STREAM_.name (f_buffer.file))
std.error.put_string (", line ")
else
std.error.put_string ("line ")
end
std.error.put_integer (eif_lineno)
std.error.put_string (": ")
std.error.put_string (a_message)
std.error.put_character ('%N')
end
invariant
ast_factory_not_void: ast_factory /= Void
end -- class ET_LACE_PARSER_SKELETON
|