rufus-lua-win 5.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- metadata +529 -0
@@ -0,0 +1,149 @@
|
|
1
|
+
--
|
2
|
+
-- Project: LuaIDL
|
3
|
+
-- Author: Ricardo Cosme <rcosme@tecgraf.puc-rio.br>
|
4
|
+
-- Filename: pre.lua
|
5
|
+
--
|
6
|
+
|
7
|
+
local error = error
|
8
|
+
local io = require "io"
|
9
|
+
local os = require "os"
|
10
|
+
local ipairs = ipairs
|
11
|
+
local pairs = pairs
|
12
|
+
local string = require "string"
|
13
|
+
local table = require "table"
|
14
|
+
local type = type
|
15
|
+
|
16
|
+
module 'luaidl.pre'
|
17
|
+
|
18
|
+
local tab_macros
|
19
|
+
local currNumLine
|
20
|
+
local currFilename = ""
|
21
|
+
local isProcessing
|
22
|
+
local homedir
|
23
|
+
local incpath
|
24
|
+
local tab_options
|
25
|
+
|
26
|
+
local scanner
|
27
|
+
|
28
|
+
---
|
29
|
+
-- Tower of Hanoi
|
30
|
+
-------------------------------------------------------------
|
31
|
+
local function newStack()
|
32
|
+
return {""}
|
33
|
+
end
|
34
|
+
|
35
|
+
local function addString(stack, s)
|
36
|
+
table.insert(stack, s)
|
37
|
+
for i = (#stack - 1), 1, -1 do
|
38
|
+
if (string.len(stack[i]) > string.len(stack[i+1])) then
|
39
|
+
break
|
40
|
+
end
|
41
|
+
stack[i] = stack[i]..table.remove(stack)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
-------------------------------------------------------------
|
45
|
+
|
46
|
+
local function processDirective(...)
|
47
|
+
local directive, macro, value = ...
|
48
|
+
if (directive == "endif") then
|
49
|
+
isProcessing = true
|
50
|
+
return ''
|
51
|
+
end
|
52
|
+
if (isProcessing) then
|
53
|
+
if (directive == "define") then
|
54
|
+
tab_macros[macro] = value
|
55
|
+
elseif (directive == "include") then
|
56
|
+
local incFilename = string.sub(macro, 2, -2)
|
57
|
+
local path = homedir..incFilename
|
58
|
+
local fh, msg = io.open(path)
|
59
|
+
if not fh then
|
60
|
+
for _, v in ipairs(incpath) do
|
61
|
+
path = v..'/'..incFilename
|
62
|
+
fh, msg = io.open(path)
|
63
|
+
if fh then
|
64
|
+
break
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
if not fh then
|
69
|
+
error(msg, 2)
|
70
|
+
end
|
71
|
+
local incSource = fh:read('*a')
|
72
|
+
local incENDNumLine = currNumLine + 1
|
73
|
+
local OUTFilename = currFilename
|
74
|
+
incSource = scanner(incSource, tab_options)
|
75
|
+
return string.format('# %d "%s" 1\n%s# %d "%s" 2\n',
|
76
|
+
1, path,
|
77
|
+
incSource,
|
78
|
+
incENDNumLine, OUTFilename
|
79
|
+
)
|
80
|
+
elseif (directive == "ifndef") then
|
81
|
+
if (tab_macros[macro]) then
|
82
|
+
isProcessing = false
|
83
|
+
end
|
84
|
+
else
|
85
|
+
return '#'..table.concat({...}, ' ')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return ''
|
89
|
+
end
|
90
|
+
|
91
|
+
local function macroExpansion(str)
|
92
|
+
for name, value in pairs(tab_macros) do
|
93
|
+
str = string.gsub(str, '([^%w])'..name..'([^%w])', '%1'..value..'%2')
|
94
|
+
end
|
95
|
+
return str
|
96
|
+
end
|
97
|
+
|
98
|
+
function scanner(source, ptab_options)
|
99
|
+
local output = newStack()
|
100
|
+
local numLine
|
101
|
+
if (not homedir) then
|
102
|
+
addString(output, '# 1 "'..currFilename..'"\n')
|
103
|
+
homedir, numLine = string.gsub(currFilename, '(.*/).*', '%1')
|
104
|
+
if (numLine == 0) then
|
105
|
+
homedir = ''
|
106
|
+
end
|
107
|
+
end
|
108
|
+
numLine = 1
|
109
|
+
-- ugly!
|
110
|
+
source = source..'\n'
|
111
|
+
for strLine in string.gfind(source, "(.-\n)") do
|
112
|
+
strLine = string.gsub(strLine, "^%s*#%s*(%w+)%s*([^%s]*)%s*([^%s]*)", processDirective)
|
113
|
+
if (isProcessing) then
|
114
|
+
strLine = macroExpansion(strLine)
|
115
|
+
addString(output, strLine)
|
116
|
+
end
|
117
|
+
numLine = numLine + 1
|
118
|
+
currNumLine = numLine
|
119
|
+
end
|
120
|
+
return table.concat(output)
|
121
|
+
end
|
122
|
+
|
123
|
+
function run(source, ptab_options)
|
124
|
+
tab_macros = {}
|
125
|
+
currNumLine = 1
|
126
|
+
isProcessing = true
|
127
|
+
homedir = nil
|
128
|
+
incpath = nil
|
129
|
+
tab_options = ptab_options
|
130
|
+
if tab_options then
|
131
|
+
currFilename = tab_options.filename
|
132
|
+
if currFilename then
|
133
|
+
if (type(currFilename) ~= "string") then
|
134
|
+
error("Invalid filename", 2)
|
135
|
+
end
|
136
|
+
else
|
137
|
+
currFilename = ""
|
138
|
+
end
|
139
|
+
incpath = tab_options.incpath
|
140
|
+
if incpath then
|
141
|
+
if (type(incpath) ~= "table") then
|
142
|
+
error("'incpath' must be a table", 2)
|
143
|
+
end
|
144
|
+
else
|
145
|
+
incpath = {}
|
146
|
+
end
|
147
|
+
end
|
148
|
+
return scanner(source, tab_options)
|
149
|
+
end
|
@@ -0,0 +1,3631 @@
|
|
1
|
+
--
|
2
|
+
-- Project: LuaIDL
|
3
|
+
-- Author: Ricardo Cosme <rcosme@tecgraf.puc-rio.br>
|
4
|
+
-- Filename: sin.lua
|
5
|
+
--
|
6
|
+
|
7
|
+
-- OMG IDL Grammar (Corba v3.0)
|
8
|
+
-- LL(1)
|
9
|
+
--(1) <specification> := <import_l> <definition_l>
|
10
|
+
--(2) <import_l> := <import> <import_l>
|
11
|
+
--(3) | empty
|
12
|
+
--(4) <import> := TK_IMPORT <imported_scope> ";"
|
13
|
+
--(5) <imported_scope> := <scoped_name>
|
14
|
+
--(6) | TK_STRING_LITERAL
|
15
|
+
--(7) <scoped_name> := TK_ID <scoped_name>
|
16
|
+
--(8) | ":" ":" TK_ID <scoped_name_l>
|
17
|
+
--(9) <scoped_name_l> := ":" ":" TK_ID <scoped_name_l>
|
18
|
+
--(10) | empty
|
19
|
+
--(11) <definition_l> := <definition> <definition_l_r>
|
20
|
+
--(12) <definition_l_r> := <definition> <definition_l_r>
|
21
|
+
--(13) | empty
|
22
|
+
--(14) <definition> := <type_dcl> ";"
|
23
|
+
--(15) | <const_dcl> ";"
|
24
|
+
--(16) | <except_dcl> ";"
|
25
|
+
--(17) | <inter_value_event> ";"
|
26
|
+
--(18) | <module> ";"
|
27
|
+
--(19) | <type_id_dcl> ";"
|
28
|
+
--(20) | <type_prefix_dcl> ";"
|
29
|
+
--(21) | <component> ";"
|
30
|
+
--(22) | <home_dcl> ";"
|
31
|
+
--(23) <type_dcl> := "typedef" <type_declarator>
|
32
|
+
--(24) | <enum_type>
|
33
|
+
--(25) | TK_NATIVE TK_ID
|
34
|
+
--(26) | <union_or_struct>
|
35
|
+
--(27) <type_declarator> := <type_spec> <declarator_l>
|
36
|
+
--(28) <type_spec> := <simple_type_spec>
|
37
|
+
--(29) | <constr_type_spec>
|
38
|
+
--(30) <simple_type_spec> := <base_type_spec>
|
39
|
+
--(31) | <template_type_spec>
|
40
|
+
--(32) | <scoped_name>
|
41
|
+
--(33) <constr_type_spec> := <struct_type>
|
42
|
+
--(34) | <union_type>
|
43
|
+
--(35) | <enum_type>
|
44
|
+
--(36) <base_type_spec> := <float_type_or_int_type>
|
45
|
+
--(37) | TK_CHAR
|
46
|
+
-- | TK_WCHAR **
|
47
|
+
--(38) | TK_BOOLEAN
|
48
|
+
--(39) | TK_OCTET
|
49
|
+
--(40) | TK_ANY
|
50
|
+
--(41) | TK_OBJECT
|
51
|
+
--(42) | TK_VALUEBASE
|
52
|
+
--(43) <float_type_or_int_type>:= <floating_pt_type>
|
53
|
+
--(44) | <integer_type>
|
54
|
+
--(45) | TK_LONG <long_or_double>
|
55
|
+
--(46) <floating_pt_type> := TK_FLOAT
|
56
|
+
--(47) | TK_DOUBLE
|
57
|
+
--(48) <integer_type> := TK_SHORT
|
58
|
+
--(49) | <unsigned_int>
|
59
|
+
--(50) <unsigned_int> := TK_UNSIGNED <unsigned_int_tail>
|
60
|
+
--(51) <unsigned_int_tail> := TK_LONG <long_e>
|
61
|
+
--(52) | TK_SHORT
|
62
|
+
--(53) <long_e> := TK_LONG
|
63
|
+
--(54) | empty
|
64
|
+
--(55) <long_or_double> := TK_LONG
|
65
|
+
--(56) | TK_DOUBLE
|
66
|
+
--(57) | empty
|
67
|
+
--(58) <template_type_spec> := <sequence_type>
|
68
|
+
--(59) | <string_type>
|
69
|
+
-- | <wide_string_type> **
|
70
|
+
--(60) | <fixed_pt_type>
|
71
|
+
--(61) <sequence_type> := TK_SEQUENCE "<" <simple_type_spec> <sequence_type_tail>
|
72
|
+
--(69) <sequence_type_tail> := "," <positive_int_const> ">"
|
73
|
+
--(70) | ">"
|
74
|
+
--(71) <string_type> := TK_STRING <string_type_tail>
|
75
|
+
--(72) <string_type_tail> := "<" <positive_int_const> ">"
|
76
|
+
--(73) | empty
|
77
|
+
-- <wide_string_type> := TK_WSTRING <string_type_tail> **
|
78
|
+
--(74) <fixed_pt_type> := TK_FIXED "<" <positive_int_const> "," <positive_int_const> ">"
|
79
|
+
--(75) <positive_int_const> := <xor_expr> <or_expr_l>
|
80
|
+
--(91) <or_expr_l> := "|" <xor_expr> <or_expr_l>
|
81
|
+
--(92) | empty
|
82
|
+
--(93) <xor_expr> := <and_expr> <xor_expr_l>
|
83
|
+
--(94) <xor_expr_l> := "^" <and_expr> <xor_expr_l>
|
84
|
+
--(95) | empty
|
85
|
+
--(96) <and_expr> := <shift_expr> <and_expr_l>
|
86
|
+
--(97) <and_expr_l> := "&" <shift_expr> <and_expr_l>
|
87
|
+
--(98) | empty
|
88
|
+
--(99) <shift_expr> := <add_expr> <shift_expr_l>
|
89
|
+
--(100) <shift_expr_l> := ">>" <add_expr> <shift_expr_l>
|
90
|
+
--(101) | "<<" <add_expr> <shift_expr_l>
|
91
|
+
--(102) | empty
|
92
|
+
--(103) <add_expr> := <mult_expr> <add_expr_l>
|
93
|
+
--(104) <add_expr_l> := "+" <mult_expr> <add_expr_l>
|
94
|
+
--(105) | "-" <mult_expr> <add_expr_l>
|
95
|
+
--(106) | empty
|
96
|
+
--(107) <mult_expr> := <unary_expr> <mult_expr_l>
|
97
|
+
--(108) <mult_expr_l> := "*" <unary_expr> <mult_expr_l>
|
98
|
+
--(109) | "/" <unary_expr> <mult_expr_l>
|
99
|
+
--(110) | "%" <unary_expr> <mult_expr_l>
|
100
|
+
--(111) | empty
|
101
|
+
--(112) <unary_expr> := <unary_operator> <primary_expr>
|
102
|
+
--(113) | <primary_expr>
|
103
|
+
--(114) <unary_operator> := "-"
|
104
|
+
--(115) | "+"
|
105
|
+
--(116) | "~"
|
106
|
+
--(117) <primary_expr> := <scoped_name>
|
107
|
+
--(118) | <literal>
|
108
|
+
--(119) | "(" <positive_int_const3> ")"
|
109
|
+
--(120) <literal> := TK_INTEGER_LITERAL
|
110
|
+
--(121) | TK_STRING_LITERAL
|
111
|
+
-- | TK_WSTRING_LITERAL **
|
112
|
+
--(122) | TK_CHAR_LITERAL
|
113
|
+
-- | TK_WCHAR_LITERAL **
|
114
|
+
--(123) | TK_FIXED_LITERAL
|
115
|
+
--(124) | TK_FLOAT_LITERAL
|
116
|
+
--(125) | <boolean_literal>
|
117
|
+
--(126) <boolean_literal> := TK_TRUE
|
118
|
+
--(127) | TK_FALSE
|
119
|
+
--(136) <struct_type> := TK_STRUCT TK_ID "{" <member_l> "}"
|
120
|
+
--(137) <member_l> := <member> <member_r>
|
121
|
+
--(138) <member_r> := <member> <member_r>
|
122
|
+
--(139) | empty
|
123
|
+
--(140) <member> := <type_spec> <declarator_l> ";"
|
124
|
+
--(141) <typedef_dcl_l> := <typedef_dcl> <typedef_l_r>
|
125
|
+
--(142) <typedef_l_r> := "," <typedef_dcl> <typedef_l_r>
|
126
|
+
--(143) | empty
|
127
|
+
--(144) <typedef_dcl> := TK_ID <fixed_array_size_l>
|
128
|
+
--(145) <fixed_array_size_l> := <fixed_array_size> <fixed_array_size_l>
|
129
|
+
--(146) | empty
|
130
|
+
--(147) <fixed_array_size> := "[" <positive_int_const4> "]"
|
131
|
+
--(148) <union_type> := TK_UNION TK_ID TK_SWITCH "(" <switch_type_spec> ")"
|
132
|
+
-- "{" <case_l> "}"
|
133
|
+
--(149) <switch_type_spec> := <integer_type>
|
134
|
+
--(150) | TK_LONG <long_e>
|
135
|
+
--(151) | TK_CHAR
|
136
|
+
--(152) | TK_BOOLEAN
|
137
|
+
--(153) | TK_ENUM
|
138
|
+
--(154) | <scoped_name>
|
139
|
+
--(155) <case_l> := <case> <case_l_r>
|
140
|
+
--(156) <case_l_r> := <case> <case_l_r>
|
141
|
+
--(157) | empty
|
142
|
+
--(158) <case> := <case_label_l> <element_spec> ";"
|
143
|
+
--(159) <case_label_l> := <case_label> <case_label_l_r>
|
144
|
+
--(160) <case_label_l_r> := <case_label> <case_label_l_r>
|
145
|
+
--(161) | empty
|
146
|
+
--(162) <case_label> := TK_CASE <positive_int_const5> ":"
|
147
|
+
--(163) | TK_DEFAULT ":"
|
148
|
+
--(164) <element_spec> := <type_spec> <declarator>
|
149
|
+
--(165) <enum_type> := TK_ENUM <enumerator>
|
150
|
+
-- "{" <enumerator> <enumerator_l> "}"
|
151
|
+
--(166) <enumerator_l> := "," <enumerator> <enumerator_l>
|
152
|
+
--(167) | empty
|
153
|
+
--(168) <union_or_struct> := TK_STRUCT TK_ID <struct_tail>
|
154
|
+
--(169) | TK_UNION TK_ID TK_SWITCH <union_tail>
|
155
|
+
--(170) <struct_tail> := "{" <member_l> "}"
|
156
|
+
--(171) | empty
|
157
|
+
--(172) <union_tail> := TK_SWITCH "(" <switch_type_spec> ")"
|
158
|
+
-- "{" <case_l> "}"
|
159
|
+
--(173) | empty
|
160
|
+
--(174) <const_dcl> := TK_CONST <const_type> TK_ID "=" <positive_int_const>
|
161
|
+
--(175) <const_type> := <float_type_or_int_type>
|
162
|
+
--(176) | TK_CHAR
|
163
|
+
-- | TK_WCHAR **
|
164
|
+
--(177) | TK_BOOLEAN
|
165
|
+
--(178) | TK_STRING
|
166
|
+
-- | TK_WSTRING **
|
167
|
+
--(179) | <scoped_name>
|
168
|
+
--(180) | TK_OCTET
|
169
|
+
--(181) | TK_FIXED
|
170
|
+
--(186) <except_dcl> := TK_EXCEPTION TK_ID "{" <member_l_empty> "}"
|
171
|
+
--(187) <member_l_empty> := <member> <member_l_empty>
|
172
|
+
--(188) | empty
|
173
|
+
--(189) <inter_value_event> := TK_ABSTRACT <abstract_tail>
|
174
|
+
--(190) | TK_LOCAL TK_INTERFACE TK_ID <interface_tail>
|
175
|
+
--(191) | TK_CUSTOM <value_or_event>
|
176
|
+
--(192) | TK_INTERFACE TK_ID <interface_tail>
|
177
|
+
--(193) | TK_VALUETYPE TK_ID <value_tail>
|
178
|
+
--(194) | TK_EVENTTYPE TK_ID <eventtype_tail>
|
179
|
+
--(195) <abstract_tail> := TK_INTERFACE TK_ID <interface_tail>
|
180
|
+
--(196) | TK_VALUETYPE TK_ID <valueinhe_export_empty>
|
181
|
+
--(197) | TK_EVENTTYPE TK_ID <valueinhe_export_empty>
|
182
|
+
--(198) <interface_tail> := ":" <scoped_name> <bases> "{" <export_l> "}"
|
183
|
+
--(199) | "{" <export_l> "}"
|
184
|
+
--(200) | empty
|
185
|
+
--(205) <bases> := "," <scoped_name> <bases>
|
186
|
+
--(206) | empty
|
187
|
+
--(207) <export_l> := <export> <export_l>
|
188
|
+
--(208) | empty
|
189
|
+
--(209) <export> := <type_dcl> ";"
|
190
|
+
--(210) | <const_dcl> ";"
|
191
|
+
--(211) | <except_dcl> ";"
|
192
|
+
--(212) | <attr_dcl> ";"
|
193
|
+
--(213) | <op_dcl> ";"
|
194
|
+
--(214) | <type_id_dcl> ";"
|
195
|
+
--(215) | <type_prefix_dcl> ";"
|
196
|
+
--(216) <attr_dcl> := <readonly_attr_spec>
|
197
|
+
--(217) | <attr_spec>
|
198
|
+
--(218) <readonly_attr_spec> := TK_READONLY TK_ATTRIBUTE <param_type_spec> <readonly_attr_dec>
|
199
|
+
--(219) <param_type_spec> := <base_type_spec>
|
200
|
+
--(220) | <string_type>
|
201
|
+
-- | <wide_string_type> **
|
202
|
+
--(221) | <scoped_name>
|
203
|
+
--(226) <readonly_attr_dec> := TK_ID <readonly_attr_dec_tail>
|
204
|
+
--(227) <readonly_attr_dec_tail>:= <raises_expr>
|
205
|
+
--(228) | <simple_dec_l>
|
206
|
+
-- | empty
|
207
|
+
--(229) <raises_expr> := TK_RAISES "(" <scoped_name> <inter_name_seq> ")"
|
208
|
+
--(230) <simple_dec_l) := "," TK_ID <simple_dec_l>
|
209
|
+
--(231) | empty
|
210
|
+
--(232) <attr_spec> := TK_ATTRIBUTE <param_type_spec> <attr_declarator>
|
211
|
+
--(233) <attr_declarator> := TK_ID <attr_declarator_tail>
|
212
|
+
--(234) <attr_declarator_tail> := <attr_raises_expr>
|
213
|
+
--(235) | <simple_dec_l>
|
214
|
+
-- | empty
|
215
|
+
--(236) <attr_raises_expr> := TK_GETRAISES <exception_l> <attr_raises_expr_tail>
|
216
|
+
--(237) | TK_SETRAISES <exception_l>
|
217
|
+
--(238) <attr_raises_expr_tail> := TK_SETRAISES <exception_l>
|
218
|
+
--(239) | empty
|
219
|
+
--(240) <exception_l> := "(" <scoped_name> <inter_name_seq> ")"
|
220
|
+
--(241) <inter_name_seq> := "," <scoped_name> <inter_name_seq>
|
221
|
+
--(242) | empty
|
222
|
+
--(243) <op_dcl> := TK_ONEWAY <op_type_spec> TK_ID <parameter_dcls> <raises_expr_e>
|
223
|
+
-- <context_expr_e>
|
224
|
+
--(244) | <op_type_spec> TK_ID <parameter_dcls> <raises_expr_e>
|
225
|
+
-- <context_expr_e>
|
226
|
+
--(245) <op_type_spec> := <param_type_spec>
|
227
|
+
--(246) | TK_VOID
|
228
|
+
--(247) <parameter_dcls> := "(" <parameter_dcls_tail>
|
229
|
+
--(248) <parameter_dcls_tail> := <param_dcl> <param_dcl_l>
|
230
|
+
--(249) | ")"
|
231
|
+
--(250) <param_dcl> := <param_attribute> <param_type_spec> TK_ID
|
232
|
+
--(251) <param_attribute> := TK_IN
|
233
|
+
--(252) | TK_OUT
|
234
|
+
--(253) | TK_INOUT
|
235
|
+
--(254) <param_dcl_l> := "," <param_dcl> <param_dcl_l>
|
236
|
+
--(255) | empty
|
237
|
+
--(256) <context_expr> := TK_CONTEXT "(" <context> <string_literal_l> ")"
|
238
|
+
--(257) <string_literal_l> := "," <context> <string_literal_l>
|
239
|
+
--(258) | empty
|
240
|
+
--(259) <type_id_dcl> := TK_TYPEID <scoped_name> TK_STRING_LITERAL
|
241
|
+
--(260) <type_prefix_dcl> := TK_TYPEPREFIX <scoped_name> TK_STRING_LITERAL
|
242
|
+
--(265) <valueinhe_export_empty>:= <value_inhe_spec> "{" <export_l> "}
|
243
|
+
--(266) | "{" <export_l> "}"
|
244
|
+
--(267) | empty
|
245
|
+
--(268) <value_inhe_spec> := ":" <truncatable_e> <value_name> <value_name_list>
|
246
|
+
-- <supports_e>
|
247
|
+
--(269) | <supports_e>
|
248
|
+
--(270) | empty
|
249
|
+
--(271) <truncatable_e> := TK_TRUNCATABLE
|
250
|
+
--(272) | empty
|
251
|
+
--(273) <value_name> := TK_ID <value_name_l>
|
252
|
+
--(274) | ":" ":" TK_ID <value_name_l>
|
253
|
+
--(275) <value_name_l> := ":" ":" TK_ID <value_name_l>
|
254
|
+
--(276) | empty
|
255
|
+
--(277) <value_name_list> := "," <value_name> <value_name_list>
|
256
|
+
--(278) | empty
|
257
|
+
--(279) <supports_e> := TK_SUPPORTS <inter_name> <inter_name_seq2>
|
258
|
+
--(280) | empty
|
259
|
+
--(281) <value_or_event> := TK_VALUETYPE TK_ID <valueinhe_export>
|
260
|
+
--(282) | TK_EVENTTYPE TK_ID <valueinhe_export>
|
261
|
+
--(283) <valueinhe_export> := <value_inhe_spec> "{" <value_element_l> "}"
|
262
|
+
--(284) | "{" <value_element_l> "}"
|
263
|
+
--(285) <value_element_l> := <value_element> <value_element_l>
|
264
|
+
--(286) | empty
|
265
|
+
--(287) <value_element> := <export>
|
266
|
+
--(288) | <state_member>
|
267
|
+
--(289) | <init_dcl>
|
268
|
+
--(290) <state_member> := TK_PUBLIC <type_spec> <declarator_l> ";"
|
269
|
+
--(291) | TK_PRIVATE <type_spec> <declarator_l> ";"
|
270
|
+
--(292) <init_dcl> := TK_FACTORY TK_ID "(" <init_param_dcl_l_e> ")"
|
271
|
+
-- <raises_expr_e> ";"
|
272
|
+
--(293) <init_param_dcl_l_e> := <init_param_dcl> <init_param_dcl_l_e_r>
|
273
|
+
--(294) | empty
|
274
|
+
--(295) <init_param_dcl_l_e_r> := "," <init_param_dcl> <init_param_dcl_l_e_r>
|
275
|
+
--(296) | empty
|
276
|
+
--(297) <init_param_dcl> := TK_IN <param_type_spec> TK_ID
|
277
|
+
--(298) <value_tail> := <value_inhe_spec> "{" <value_element_l> "}"
|
278
|
+
--(299) | "{" <value_element_l> "}"
|
279
|
+
--(300) | <type_spec>
|
280
|
+
--(301) | empty
|
281
|
+
--(302) <eventtype_tail> := <value_inhe_spec> "{" <value_element_l> "}"
|
282
|
+
--(303) | "{" <value_element_l> "}"
|
283
|
+
--(304) | empty
|
284
|
+
--(305) <module> := TK_MODULE TK_ID "{" <definition_l> "}"
|
285
|
+
--(306) <component> := TK_COMPONENT TK_ID <component_tail>
|
286
|
+
--(307) <component_tail> := <component_inh_spec> <supp_inter_spec>
|
287
|
+
-- "{" <component_body> "}"
|
288
|
+
--(308) | <supp_inter_spec> "{" <component_body> "}"
|
289
|
+
--(309) | "{" <component_body> "}"
|
290
|
+
--(310) | empty
|
291
|
+
--(311) <component_inh_spec> := ":" <component_name>
|
292
|
+
--(312) <component_name> := TK_ID <component_name_l>
|
293
|
+
--(313) | ":" ":" TK_ID <component_name_l>
|
294
|
+
--(314) <component_name_l> := ":" ":" TK_ID <component_name_l>
|
295
|
+
--(315) | empty
|
296
|
+
--(316) <supp_inter_spec> := TK_SUPPORTS <supp_name> <supp_name_list>
|
297
|
+
--(316e) | empty
|
298
|
+
--(317) <supp_name> := TK_ID <supp_name_l>
|
299
|
+
--(318) | ":" ":" TK_ID <supp_name_l>
|
300
|
+
--(319) <supp_name_l> := ":" ":" TK_ID <supp_name_l>
|
301
|
+
--(320) | empty
|
302
|
+
--(321) <supp_name_list> := "," <supp_name> <supp_name_list>
|
303
|
+
--(322) | empty
|
304
|
+
--(323) <component_body> := <component_export> <component_body>
|
305
|
+
--(324) | empty
|
306
|
+
--(325) <component_export> := <provides_dcl> ";"
|
307
|
+
--(326) | <uses_dcl> ";"
|
308
|
+
--(327) | <emits_dcl> ";"
|
309
|
+
--(328) | <publishes_dcl> ";"
|
310
|
+
--(329) | <consumes_dcl> ";"
|
311
|
+
--(330) | <attr_dcl> ";"
|
312
|
+
--(331) <provides_dcl> := TK_PROVIDES <interface_type> TK_ID
|
313
|
+
--(332) <interface_type> := <scoped_name>
|
314
|
+
--(333) | TK_OBJECT
|
315
|
+
--(338) <uses_dcl> := TK_USES <multiple_e> <interface_type> TK_ID
|
316
|
+
--(339) <multiple_e> := TK_MULTIPLE
|
317
|
+
--(340) | empty
|
318
|
+
--(341) <emits_dcl> := TK_EMITS <scoped_name> TK_ID
|
319
|
+
--(342) <publishes_dcl> := TK_PUBLISHES <scoped_name> TK_ID
|
320
|
+
--(343) <consumes_dcl> := TK_CONSUMES <scoped_name> TK_ID
|
321
|
+
|
322
|
+
--(344) <home_dcl> := TK_HOME TK_ID <home_dcl_tail>
|
323
|
+
--(345) <home_dcl_tail> := <home_inh_spec> <supp_inter_spec>
|
324
|
+
-- TK_MANAGES <home_name> <primary_key_spec_e>
|
325
|
+
-- "{" <home_export_l> "}"raises_expr>
|
326
|
+
--(346) | <supp_inter_spec> TK_MANAGES <home_name> <primary_key_spec_e>
|
327
|
+
-- "{" <home_export_l> "}"
|
328
|
+
--(347) | TK_MANAGES <home_name> <primary_key_spec_e>
|
329
|
+
-- "{" <home_export_l> "}"
|
330
|
+
--(348) <home_inh_spec> := ":" <scoped_name>
|
331
|
+
--(353) <primary_key_spec_e> := TK_PRIMARYKEY <scoped_name>
|
332
|
+
--(354) | empty
|
333
|
+
--(359) <home_export_l> := <home_export> <home_export_l>
|
334
|
+
--(360) | empty
|
335
|
+
--(361) <home_export> := <export>
|
336
|
+
--(362) | <factory_dcl> ";"
|
337
|
+
--(363) | <finder_dcl> ";"
|
338
|
+
--(364) <factory_dcl> := TK_FACTORY TK_ID "(" <init_param_dcls> ")"
|
339
|
+
-- <raises_expr_e>
|
340
|
+
--(365) <finder_dcl> := TK_FINDER TK_ID "(" <init_param_dcls> ")"
|
341
|
+
-- <raises_expr_e>
|
342
|
+
--(366) <init_param_dcls> := <init_param_dcl> <init_param_dcl_list>
|
343
|
+
--(367) | empty
|
344
|
+
--(368) <init_param_dcl_list> := "," <init_param_dcl> <init_param_dcl_list>
|
345
|
+
--(369) | empty
|
346
|
+
--(370) <raises_expr_e> := <raises_expr>
|
347
|
+
--(371) | empty
|
348
|
+
--(376) <enumerator> := TK_ID
|
349
|
+
--(377) <context_expr_e> := <context_expr>
|
350
|
+
--(378) | empty
|
351
|
+
--(379) <context> := TK_STRING_LITERAL
|
352
|
+
|
353
|
+
local type = type
|
354
|
+
local pairs = pairs
|
355
|
+
local tonumber = tonumber
|
356
|
+
local require = require
|
357
|
+
local error = error
|
358
|
+
local ipairs = ipairs
|
359
|
+
|
360
|
+
local math = require "math"
|
361
|
+
local string = require "string"
|
362
|
+
local table = require "table"
|
363
|
+
|
364
|
+
module 'luaidl.sin'
|
365
|
+
|
366
|
+
local lex = require 'luaidl.lex'
|
367
|
+
|
368
|
+
local tab_firsts = {}
|
369
|
+
local tab_follow = {}
|
370
|
+
|
371
|
+
local function set_firsts(firsts)
|
372
|
+
local tab = {}
|
373
|
+
for _, token in ipairs(firsts) do
|
374
|
+
local tokenDcl = lex.tab_tokens[token]
|
375
|
+
if tokenDcl then
|
376
|
+
tab[tokenDcl] = true
|
377
|
+
else
|
378
|
+
tab[token] = true
|
379
|
+
end
|
380
|
+
end
|
381
|
+
return tab
|
382
|
+
end
|
383
|
+
|
384
|
+
tab_firsts.rule_1 = set_firsts { 'TK_IMPORT' }
|
385
|
+
tab_firsts.rule_11 = set_firsts {
|
386
|
+
'TK_TYPEDEF','TK_ENUM','TK_NATIVE','TK_UNION','TK_STRUCT',
|
387
|
+
'TK_CONST','TK_EXCEPTION','TK_ABSTRACT','TK_LOCAL',
|
388
|
+
'TK_INTERFACE','TK_CUSTOM','TK_VALUETYPE',
|
389
|
+
'TK_EVENTTYPE','TK_MODULE','TK_TYPEID',
|
390
|
+
'TK_TYPEPREFIX','TK_COMPONENT','TK_HOME'
|
391
|
+
}
|
392
|
+
tab_firsts.rule_12 = tab_firsts.rule_11
|
393
|
+
tab_firsts.rule_14 = set_firsts { 'TK_TYPEDEF', 'TK_ENUM', 'TK_NATIVE', 'TK_UNION', 'TK_STRUCT' }
|
394
|
+
tab_firsts.rule_15 = set_firsts { 'TK_CONST' }
|
395
|
+
tab_firsts.rule_16 = set_firsts { 'TK_EXCEPTION' }
|
396
|
+
tab_firsts.rule_17 = set_firsts {
|
397
|
+
'TK_ABSTRACT', 'TK_LOCAL', 'TK_INTERFACE', 'TK_CUSTOM',
|
398
|
+
'TK_VALUETYPE', 'TK_EVENTTYPE'
|
399
|
+
}
|
400
|
+
tab_firsts.rule_18 = set_firsts { 'TK_MODULE' }
|
401
|
+
tab_firsts.rule_19 = set_firsts { 'TK_TYPEID' }
|
402
|
+
tab_firsts.rule_20 = set_firsts { 'TK_TYPEPREFIX' }
|
403
|
+
tab_firsts.rule_21 = set_firsts { 'TK_COMPONENT' }
|
404
|
+
tab_firsts.rule_22 = set_firsts { 'TK_HOME' }
|
405
|
+
tab_firsts.rule_23 = set_firsts { 'TK_TYPEDEF' }
|
406
|
+
tab_firsts.rule_24 = set_firsts { 'TK_ENUM' }
|
407
|
+
tab_firsts.rule_25 = set_firsts { 'TK_NATIVE' }
|
408
|
+
tab_firsts.rule_26 = set_firsts { 'TK_STRUCT', 'TK_UNION' }
|
409
|
+
tab_firsts.rule_27 = set_firsts {
|
410
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY', 'TK_OBJECT',
|
411
|
+
'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT',
|
412
|
+
'TK_UNSIGNED', 'TK_SEQUENCE' , 'TK_STRING', 'TK_FIXED' ,
|
413
|
+
'TK_ID', ":", 'TK_STRUCT', 'TK_UNION', 'TK_ENUM',
|
414
|
+
}
|
415
|
+
tab_firsts.rule_28 = set_firsts {
|
416
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY', 'TK_OBJECT',
|
417
|
+
'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT',
|
418
|
+
'TK_UNSIGNED', 'TK_SEQUENCE' , 'TK_STRING', 'TK_FIXED' ,
|
419
|
+
'TK_ID', ":",
|
420
|
+
}
|
421
|
+
tab_firsts.rule_29 = set_firsts { 'TK_STRUCT', 'TK_UNION', 'TK_ENUM' }
|
422
|
+
tab_firsts.rule_30 = set_firsts {
|
423
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY', 'TK_OBJECT',
|
424
|
+
'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT',
|
425
|
+
'TK_UNSIGNED',
|
426
|
+
}
|
427
|
+
tab_firsts.rule_31 = set_firsts { 'TK_SEQUENCE', 'TK_STRING', 'TK_FIXED' }
|
428
|
+
tab_firsts.rule_32 = set_firsts { 'TK_ID', ':' }
|
429
|
+
|
430
|
+
tab_firsts.rule_33 = set_firsts { 'TK_STRUCT' }
|
431
|
+
tab_firsts.rule_34 = set_firsts { 'TK_UNION' }
|
432
|
+
tab_firsts.rule_35 = set_firsts { 'TK_ENUM' }
|
433
|
+
tab_firsts.rule_36 = set_firsts { 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED', 'TK_LONG' }
|
434
|
+
tab_firsts.rule_37 = set_firsts { 'TK_CHAR' }
|
435
|
+
tab_firsts.rule_38 = set_firsts { 'TK_BOOLEAN' }
|
436
|
+
tab_firsts.rule_39 = set_firsts { 'TK_OCTET' }
|
437
|
+
tab_firsts.rule_40 = set_firsts { 'TK_ANY' }
|
438
|
+
tab_firsts.rule_41 = set_firsts { 'TK_OBJECT' }
|
439
|
+
tab_firsts.rule_42 = set_firsts { 'TK_VALUEBASE' }
|
440
|
+
|
441
|
+
tab_firsts.rule_43 = set_firsts { 'TK_FLOAT', 'TK_DOUBLE' }
|
442
|
+
tab_firsts.rule_44 = set_firsts { 'TK_SHORT', 'TK_UNSIGNED' }
|
443
|
+
tab_firsts.rule_45 = set_firsts { 'TK_LONG' }
|
444
|
+
tab_firsts.rule_46 = set_firsts { 'TK_FLOAT' }
|
445
|
+
tab_firsts.rule_47 = set_firsts { 'TK_DOUBLE' }
|
446
|
+
tab_firsts.rule_48 = set_firsts { 'TK_SHORT' }
|
447
|
+
tab_firsts.rule_49 = set_firsts { 'TK_UNSIGNED' }
|
448
|
+
tab_firsts.rule_50 = tab_firsts.rule_49
|
449
|
+
tab_firsts.rule_51 = tab_firsts.rule_45
|
450
|
+
tab_firsts.rule_52 = set_firsts { 'TK_SHORT' }
|
451
|
+
tab_firsts.rule_53 = set_firsts { 'TK_LONG' }
|
452
|
+
tab_firsts.rule_55 = set_firsts { 'TK_LONG' }
|
453
|
+
tab_firsts.rule_56 = set_firsts { 'TK_DOUBLE' }
|
454
|
+
|
455
|
+
tab_firsts.rule_58 = set_firsts { 'TK_SEQUENCE' }
|
456
|
+
tab_firsts.rule_59 = set_firsts { 'TK_STRING' }
|
457
|
+
tab_firsts.rule_60 = set_firsts { 'TK_FIXED' }
|
458
|
+
|
459
|
+
tab_firsts.rule_62 = tab_firsts.rule_30
|
460
|
+
tab_firsts.rule_63 = tab_firsts.rule_31
|
461
|
+
tab_firsts.rule_64 = tab_firsts.rule_32
|
462
|
+
|
463
|
+
tab_firsts.rule_69 = set_firsts { ',' }
|
464
|
+
tab_firsts.rule_70 = set_firsts { '>' }
|
465
|
+
tab_firsts.rule_72 = set_firsts { '<' }
|
466
|
+
tab_firsts.rule_75 = set_firsts {
|
467
|
+
'-', '+', '~', '(', 'TK_ID', ':', 'TK_INTEGER_LITERAL',
|
468
|
+
'TK_STRING_LITERAL', 'TK_CHAR_LITERAL', 'TK_FIXED_LITERAL',
|
469
|
+
'TK_FLOAT_LITERAL', 'TK_TRUE', 'TK_FALSE'
|
470
|
+
}
|
471
|
+
tab_firsts.rule_93 = tab_firsts.rule_75
|
472
|
+
tab_firsts.rule_91 = set_firsts { '|' }
|
473
|
+
tab_firsts.rule_94 = set_firsts { '^' }
|
474
|
+
tab_firsts.rule_96 = tab_firsts.rule_75
|
475
|
+
tab_firsts.rule_97 = set_firsts { '&' }
|
476
|
+
tab_firsts.rule_99 = tab_firsts.rule_75
|
477
|
+
tab_firsts.rule_100 = set_firsts { '>>' }
|
478
|
+
tab_firsts.rule_101 = set_firsts { '<<' }
|
479
|
+
tab_firsts.rule_103 = tab_firsts.rule_75
|
480
|
+
tab_firsts.rule_104 = set_firsts { '+' }
|
481
|
+
tab_firsts.rule_105 = set_firsts { '-' }
|
482
|
+
tab_firsts.rule_107 = tab_firsts.rule_75
|
483
|
+
tab_firsts.rule_108 = set_firsts { '*' }
|
484
|
+
tab_firsts.rule_109 = set_firsts { '/' }
|
485
|
+
tab_firsts.rule_110 = set_firsts { '%' }
|
486
|
+
tab_firsts.rule_112 = set_firsts { '-', '+', '~' }
|
487
|
+
tab_firsts.rule_113 = set_firsts {
|
488
|
+
'(', 'TK_ID', ':', 'TK_INTEGER_LITERAL',
|
489
|
+
'TK_STRING_LITERAL', 'TK_CHAR_LITERAL', 'TK_FIXED_LITERAL',
|
490
|
+
'TK_FLOAT_LITERAL', 'TK_TRUE', 'TK_FALSE'
|
491
|
+
}
|
492
|
+
tab_firsts.rule_114 = set_firsts { '-' }
|
493
|
+
tab_firsts.rule_115 = set_firsts { '+' }
|
494
|
+
tab_firsts.rule_116 = set_firsts { '~' }
|
495
|
+
tab_firsts.rule_117 = set_firsts { 'TK_ID', ':' }
|
496
|
+
tab_firsts.rule_118 = set_firsts {
|
497
|
+
'TK_INTEGER_LITERAL', 'TK_STRING_LITERAL', 'TK_CHAR_LITERAL',
|
498
|
+
'TK_FIXED_LITERAL', 'TK_FLOAT_LITERAL', 'TK_TRUE', 'TK_FALSE'
|
499
|
+
}
|
500
|
+
tab_firsts.rule_119 = set_firsts { '(' }
|
501
|
+
tab_firsts.rule_120 = set_firsts { 'TK_INTEGER_LITERAL' }
|
502
|
+
tab_firsts.rule_121 = set_firsts { 'TK_STRING_LITERAL' }
|
503
|
+
tab_firsts.rule_122 = set_firsts { 'TK_CHAR_LITERAL' }
|
504
|
+
tab_firsts.rule_123 = set_firsts { 'TK_FIXED_LITERAL' }
|
505
|
+
tab_firsts.rule_124 = set_firsts { 'TK_FLOAT_LITERAL' }
|
506
|
+
tab_firsts.rule_125 = set_firsts { 'TK_TRUE', 'TK_FALSE' }
|
507
|
+
tab_firsts.rule_126 = set_firsts { 'TK_TRUE' }
|
508
|
+
tab_firsts.rule_127 = set_firsts { 'TK_FALSE' }
|
509
|
+
|
510
|
+
tab_firsts.rule_137 = tab_firsts.rule_27
|
511
|
+
tab_firsts.rule_138 = tab_firsts.rule_137
|
512
|
+
|
513
|
+
tab_firsts.rule_140 = tab_firsts.rule_138
|
514
|
+
tab_firsts.rule_141 = set_firsts { 'TK_ID' }
|
515
|
+
tab_firsts.rule_142 = set_firsts { "," }
|
516
|
+
|
517
|
+
tab_firsts.rule_144 = tab_firsts.rule_141
|
518
|
+
tab_firsts.rule_145 = set_firsts { "[" }
|
519
|
+
|
520
|
+
tab_firsts.rule_147 = tab_firsts.rule_145
|
521
|
+
tab_firsts.rule_148 = set_firsts { 'TK_UNION' }
|
522
|
+
tab_firsts.rule_149 = tab_firsts.rule_44
|
523
|
+
tab_firsts.rule_150 = set_firsts { 'TK_LONG' }
|
524
|
+
tab_firsts.rule_151 = set_firsts { 'TK_CHAR' }
|
525
|
+
tab_firsts.rule_152 = set_firsts { 'TK_BOOLEAN' }
|
526
|
+
tab_firsts.rule_153 = set_firsts { 'TK_ENUM' }
|
527
|
+
tab_firsts.rule_154 = set_firsts { 'TK_ID', ':' }
|
528
|
+
tab_firsts.rule_155 = set_firsts { 'TK_CASE', 'TK_DEFAULT' }
|
529
|
+
tab_firsts.rule_156 = set_firsts { 'TK_CASE', 'TK_DEFAULT' }
|
530
|
+
|
531
|
+
tab_firsts.rule_158 = set_firsts { 'TK_CASE', 'TK_DEFAULT' }
|
532
|
+
tab_firsts.rule_159 = set_firsts { 'TK_CASE', 'TK_DEFAULT' }
|
533
|
+
tab_firsts.rule_160 = set_firsts { 'TK_CASE', 'TK_DEFAULT' }
|
534
|
+
|
535
|
+
tab_firsts.rule_162 = set_firsts { 'TK_CASE' }
|
536
|
+
tab_firsts.rule_163 = set_firsts { 'TK_DEFAULT' }
|
537
|
+
tab_firsts.rule_164 = tab_firsts.rule_27
|
538
|
+
|
539
|
+
tab_firsts.rule_166 = set_firsts { "," }
|
540
|
+
|
541
|
+
tab_firsts.rule_168 = set_firsts { 'TK_STRUCT' }
|
542
|
+
tab_firsts.rule_169 = set_firsts { 'TK_UNION' }
|
543
|
+
tab_firsts.rule_170 = set_firsts { '{' }
|
544
|
+
|
545
|
+
tab_firsts.rule_172 = set_firsts { 'TK_SWITCH' }
|
546
|
+
|
547
|
+
tab_firsts.rule_174 = set_firsts { 'TK_CONST' }
|
548
|
+
tab_firsts.rule_175 = tab_firsts.rule_36
|
549
|
+
tab_firsts.rule_176 = set_firsts { 'TK_CHAR' }
|
550
|
+
tab_firsts.rule_177 = set_firsts { 'TK_BOOLEAN' }
|
551
|
+
tab_firsts.rule_178 = set_firsts { 'TK_STRING' }
|
552
|
+
tab_firsts.rule_179 = set_firsts { 'TK_ID', ':' }
|
553
|
+
tab_firsts.rule_180 = set_firsts { 'TK_OCTET' }
|
554
|
+
tab_firsts.rule_181 = set_firsts { 'TK_FIXED' }
|
555
|
+
tab_firsts.rule_186 = set_firsts { 'TK_EXCEPTION' }
|
556
|
+
tab_firsts.rule_187 = tab_firsts.rule_137
|
557
|
+
|
558
|
+
tab_firsts.rule_189 = set_firsts { 'TK_ABSTRACT' }
|
559
|
+
tab_firsts.rule_190 = set_firsts { 'TK_LOCAL' }
|
560
|
+
tab_firsts.rule_191 = set_firsts { 'TK_CUSTOM' }
|
561
|
+
tab_firsts.rule_192 = set_firsts { 'TK_INTERFACE' }
|
562
|
+
tab_firsts.rule_193 = set_firsts { 'TK_VALUETYPE' }
|
563
|
+
tab_firsts.rule_194 = set_firsts { 'TK_EVENTTYPE' }
|
564
|
+
tab_firsts.rule_195 = set_firsts { 'TK_INTERFACE' }
|
565
|
+
tab_firsts.rule_196 = set_firsts { 'TK_VALUETYPE' }
|
566
|
+
tab_firsts.rule_198 = set_firsts { ':' }
|
567
|
+
tab_firsts.rule_199 = set_firsts { '{' }
|
568
|
+
|
569
|
+
tab_firsts.rule_207 = set_firsts { 'TK_ONEWAY', 'TK_VOID', 'TK_STRING', 'TK_ID', ':',
|
570
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY',
|
571
|
+
'TK_OBJECT', 'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT',
|
572
|
+
'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED','TK_TYPEDEF',
|
573
|
+
'TK_ENUM', 'TK_NATIVE', 'TK_UNION', 'TK_STRUCT',
|
574
|
+
'TK_EXCEPTION', 'TK_READONLY', 'TK_ATTRIBUTE', 'TK_CONST', -- 'TK_TYPECODE',
|
575
|
+
}
|
576
|
+
|
577
|
+
tab_firsts.rule_209 = tab_firsts.rule_14
|
578
|
+
tab_firsts.rule_210 = set_firsts { 'TK_CONST' }
|
579
|
+
tab_firsts.rule_211 = set_firsts { 'TK_EXCEPTION' }
|
580
|
+
tab_firsts.rule_212 = set_firsts { 'TK_READONLY', 'TK_ATTRIBUTE' }
|
581
|
+
tab_firsts.rule_213 = set_firsts {
|
582
|
+
'TK_ONEWAY', 'TK_VOID', 'TK_STRING', 'TK_ID', ':',
|
583
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY',
|
584
|
+
'TK_OBJECT', 'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT',
|
585
|
+
'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED',
|
586
|
+
}
|
587
|
+
|
588
|
+
tab_firsts.rule_216 = set_firsts { 'TK_READONLY' }
|
589
|
+
tab_firsts.rule_217 = set_firsts { 'TK_ATTRIBUTE' }
|
590
|
+
|
591
|
+
tab_firsts.rule_219 = tab_firsts.rule_30
|
592
|
+
tab_firsts.rule_220 = set_firsts { 'TK_STRING' }
|
593
|
+
tab_firsts.rule_221 = tab_firsts.rule_32
|
594
|
+
|
595
|
+
|
596
|
+
tab_firsts.rule_227 = set_firsts { 'TK_RAISES' }
|
597
|
+
tab_firsts.rule_228 = set_firsts { ',' }
|
598
|
+
|
599
|
+
tab_firsts.rule_230 = set_firsts { 'TK_ID' }
|
600
|
+
tab_firsts.rule_234 = set_firsts { 'TK_GETRAISES', 'TK_SETRAISES' }
|
601
|
+
tab_firsts.rule_235 = set_firsts { ',' }
|
602
|
+
tab_firsts.rule_236 = set_firsts { 'TK_GETRAISES' }
|
603
|
+
tab_firsts.rule_237 = set_firsts { 'TK_SETRAISES' }
|
604
|
+
tab_firsts.rule_238 = tab_firsts.rule_237
|
605
|
+
|
606
|
+
tab_firsts.rule_243 = set_firsts { 'TK_ONEWAY' }
|
607
|
+
tab_firsts.rule_244 = set_firsts {
|
608
|
+
'TK_VOID', 'TK_STRING', 'TK_ID', ':',
|
609
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY',
|
610
|
+
'TK_OBJECT', 'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT',
|
611
|
+
'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED',
|
612
|
+
}
|
613
|
+
tab_firsts.rule_245 = set_firsts {
|
614
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY', 'TK_OBJECT',
|
615
|
+
'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT',
|
616
|
+
'TK_UNSIGNED', 'TK_STRING', 'TK_ID', ":",
|
617
|
+
}
|
618
|
+
tab_firsts.rule_246 = set_firsts { 'TK_VOID' }
|
619
|
+
|
620
|
+
tab_firsts.rule_248 = set_firsts { 'TK_IN', 'TK_OUT', 'TK_INOUT' }
|
621
|
+
tab_firsts.rule_249 = set_firsts { ')' }
|
622
|
+
|
623
|
+
tab_firsts.rule_251 = set_firsts { 'TK_IN' }
|
624
|
+
tab_firsts.rule_252 = set_firsts { 'TK_OUT' }
|
625
|
+
tab_firsts.rule_253 = set_firsts { 'TK_INOUT' }
|
626
|
+
tab_firsts.rule_254 = set_firsts { ',' }
|
627
|
+
|
628
|
+
tab_firsts.rule_257 = set_firsts { ',' }
|
629
|
+
|
630
|
+
tab_firsts.rule_268 = set_firsts { ':' }
|
631
|
+
tab_firsts.rule_269 = set_firsts { 'TK_SUPPORTS' }
|
632
|
+
tab_firsts.rule_271 = set_firsts { 'TK_TRUNCATABLE' }
|
633
|
+
tab_firsts.rule_277 = set_firsts { ',' }
|
634
|
+
tab_firsts.rule_281 = set_firsts { 'TK_VALUETYPE' }
|
635
|
+
tab_firsts.rule_285 = set_firsts {
|
636
|
+
'TK_ONEWAY', 'TK_VOID', 'TK_STRING', 'TK_ID', ':',
|
637
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY',
|
638
|
+
'TK_OBJECT', 'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT',
|
639
|
+
'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED','TK_TYPEDEF',
|
640
|
+
'TK_ENUM', 'TK_NATIVE', 'TK_UNION', 'TK_STRUCT',
|
641
|
+
'TK_EXCEPTION', 'TK_READONLY', 'TK_ATTRIBUTE',
|
642
|
+
'TK_PUBLIC', 'TK_PRIVATE',
|
643
|
+
'TK_FACTORY'
|
644
|
+
}
|
645
|
+
tab_firsts.rule_287 = tab_firsts.rule_207
|
646
|
+
tab_firsts.rule_288 = set_firsts { 'TK_PUBLIC', 'TK_PRIVATE' }
|
647
|
+
tab_firsts.rule_289 = set_firsts { 'TK_FACTORY' }
|
648
|
+
tab_firsts.rule_290 = set_firsts { 'TK_PUBLIC' }
|
649
|
+
tab_firsts.rule_291 = set_firsts { 'TK_PRIVATE' }
|
650
|
+
tab_firsts.rule_292 = tab_firsts.rule_289
|
651
|
+
tab_firsts.rule_297 = set_firsts { 'TK_IN' }
|
652
|
+
tab_firsts.rule_298 = set_firsts { ':', 'TK_SUPPORTS' }
|
653
|
+
tab_firsts.rule_299 = set_firsts { '{' }
|
654
|
+
tab_firsts.rule_300 = tab_firsts.rule_27
|
655
|
+
tab_firsts.rule_302 = tab_firsts.rule_298
|
656
|
+
tab_firsts.rule_303 = set_firsts { '{' }
|
657
|
+
tab_firsts.rule_305 = set_firsts { 'TK_MODULE' }
|
658
|
+
tab_firsts.rule_306 = set_firsts { 'TK_COMPONENT' }
|
659
|
+
tab_firsts.rule_307 = set_firsts { ':' }
|
660
|
+
tab_firsts.rule_308 = set_firsts { 'TK_SUPPORTS' }
|
661
|
+
tab_firsts.rule_309 = set_firsts { '{' }
|
662
|
+
tab_firsts.rule_316 = set_firsts { 'TK_SUPPORTS' }
|
663
|
+
tab_firsts.rule_321 = set_firsts { ',' }
|
664
|
+
tab_firsts.rule_323 = set_firsts { 'TK_PROVIDES', 'TK_USES', 'TK_EMITS', 'TK_PUBLISHES',
|
665
|
+
'TK_CONSUMES', 'TK_READONLY', 'TK_ATTRIBUTE' }
|
666
|
+
tab_firsts.rule_325 = set_firsts { 'TK_PROVIDES' }
|
667
|
+
tab_firsts.rule_326 = set_firsts { 'TK_USES' }
|
668
|
+
tab_firsts.rule_327 = set_firsts { 'TK_EMITS' }
|
669
|
+
tab_firsts.rule_328 = set_firsts { 'TK_PUBLISHES' }
|
670
|
+
tab_firsts.rule_329 = set_firsts { 'TK_CONSUMES' }
|
671
|
+
tab_firsts.rule_330 = set_firsts { 'TK_READONLY', 'TK_ATTRIBUTE' }
|
672
|
+
tab_firsts.rule_332 = set_firsts { 'TK_ID', ':' }
|
673
|
+
tab_firsts.rule_333 = set_firsts { 'TK_OBJECT' }
|
674
|
+
tab_firsts.rule_339 = set_firsts { 'TK_MULTIPLE' }
|
675
|
+
tab_firsts.rule_345 = set_firsts { ':' }
|
676
|
+
tab_firsts.rule_346 = set_firsts { 'TK_SUPPORTS' }
|
677
|
+
tab_firsts.rule_347 = set_firsts { 'TK_MANAGES' }
|
678
|
+
tab_firsts.rule_353 = set_firsts { 'TK_PRIMARYKEY' }
|
679
|
+
tab_firsts.rule_359 = set_firsts {
|
680
|
+
'TK_ONEWAY', 'TK_VOID', 'TK_STRING', 'TK_ID', ':',
|
681
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY',
|
682
|
+
'TK_OBJECT', 'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT',
|
683
|
+
'TK_DOUBLE', 'TK_SHORT', 'TK_UNSIGNED','TK_TYPEDEF',
|
684
|
+
'TK_ENUM', 'TK_NATIVE', 'TK_UNION', 'TK_STRUCT',
|
685
|
+
'TK_EXCEPTION', 'TK_READONLY', 'TK_ATTRIBUTE',
|
686
|
+
'TK_FACTORY', 'TK_FINDER'
|
687
|
+
}
|
688
|
+
tab_firsts.rule_361 = tab_firsts.rule_207
|
689
|
+
tab_firsts.rule_362 = set_firsts { 'TK_FACTORY' }
|
690
|
+
tab_firsts.rule_363 = set_firsts { 'TK_FINDER' }
|
691
|
+
tab_firsts.rule_364 = tab_firsts.rule_362
|
692
|
+
tab_firsts.rule_365 = tab_firsts.rule_363
|
693
|
+
tab_firsts.rule_366 = tab_firsts.rule_297
|
694
|
+
tab_firsts.rule_368 = set_firsts { ',' }
|
695
|
+
tab_firsts.rule_370 = set_firsts { 'TK_RAISES' }
|
696
|
+
|
697
|
+
tab_firsts.rule_377 = set_firsts { 'TK_CONTEXT' }
|
698
|
+
|
699
|
+
tab_firsts.rule_400 = set_firsts { 'TK_ID' }
|
700
|
+
tab_firsts.rule_401 = set_firsts { ':' }
|
701
|
+
|
702
|
+
tab_follow.rule_32 = set_firsts { 'TK_ID', ';' }
|
703
|
+
tab_follow.rule_54 = set_firsts { 'TK_ID', '>', ';' }
|
704
|
+
tab_follow.rule_61 = set_firsts { '>', ',' }
|
705
|
+
tab_follow.rule_64 = set_firsts { ',', '>' }
|
706
|
+
tab_follow.rule_69 = set_firsts { '>' }
|
707
|
+
tab_follow.rule_72 = set_firsts { '>' }
|
708
|
+
tab_follow.rule_73 = set_firsts { 'TK_ID' }
|
709
|
+
tab_follow.rule_95 = set_firsts { '|', ']', ')' }
|
710
|
+
tab_follow.rule_98 = set_firsts { '^', ']', ')' }
|
711
|
+
tab_follow.rule_102 = set_firsts { '&', ']', ')' }
|
712
|
+
tab_follow.rule_106 = set_firsts { '>>', '<<', '&', '^', '|', ']', ')' }
|
713
|
+
tab_follow.rule_111 = set_firsts { '+', '-', '>>', '<<', '&', '^', '|', ']', ')' }
|
714
|
+
tab_follow.rule_119 = set_firsts { ')' }
|
715
|
+
tab_follow.rule_139 = set_firsts { '}' }
|
716
|
+
tab_follow.rule_143 = set_firsts { ';' }
|
717
|
+
tab_follow.rule_146 = set_firsts { ',', ';' }
|
718
|
+
tab_follow.rule_147 = set_firsts { '*', '/', '%', '+', '-', '>>', '<<', '&', '^', '|', ']', ')' }
|
719
|
+
tab_follow.rule_148 = set_firsts { ')' }
|
720
|
+
tab_follow.rule_154 = set_firsts { ',', ')' }
|
721
|
+
tab_follow.rule_157 = set_firsts { '}' }
|
722
|
+
tab_follow.rule_161 = set_firsts {
|
723
|
+
'TK_CHAR', 'TK_BOOLEAN', 'TK_OCTET', 'TK_ANY', 'TK_OBJECT',
|
724
|
+
'TK_VALUEBASE', 'TK_LONG', 'TK_FLOAT', 'TK_DOUBLE', 'TK_SHORT',
|
725
|
+
'TK_UNSIGNED', 'TK_SEQUENCE' , 'TK_STRING', 'TK_FIXED' ,
|
726
|
+
'TK_ID', ":", 'TK_STRUCT', 'TK_UNION', 'TK_ENUM',
|
727
|
+
}
|
728
|
+
tab_follow.rule_162 = set_firsts { ":" }
|
729
|
+
tab_follow.rule_167 = set_firsts { "}" }
|
730
|
+
tab_follow.rule_204 = set_firsts { ',', '{' }
|
731
|
+
tab_follow.rule_221 = set_firsts { 'TK_ID' }
|
732
|
+
tab_follow.rule_229 = set_firsts { ',', ')' }
|
733
|
+
tab_follow.rule_268 = set_firsts { ',', 'TK_SUPPORTS', '{' }
|
734
|
+
tab_follow.rule_272 = set_firsts { ':', 'TK_ID' }
|
735
|
+
tab_follow.rule_278 = set_firsts { 'TK_SUPPORTS', '{' }
|
736
|
+
tab_follow.rule_286 = set_firsts { '}' }
|
737
|
+
tab_follow.rule_301 = set_firsts { ';' }
|
738
|
+
tab_follow.rule_304 = set_firsts { ';' }
|
739
|
+
tab_follow.rule_307 = set_firsts { 'TK_SUPPORTS', '{' }
|
740
|
+
tab_follow.rule_308 = set_firsts { ',', '{' }
|
741
|
+
tab_follow.rule_316 = set_firsts { ',', '{' }
|
742
|
+
tab_follow.rule_316e = set_firsts { '{' }
|
743
|
+
tab_follow.rule_321 = tab_follow.rule_316
|
744
|
+
tab_follow.rule_332 = set_firsts { 'TK_ID' }
|
745
|
+
tab_follow.rule_340 = set_firsts { 'TK_MULTIPLE', 'TK_ID', ':', 'TK_OBJECT' }
|
746
|
+
tab_follow.rule_341 = set_firsts { 'TK_ID' }
|
747
|
+
tab_follow.rule_342 = tab_follow.rule_341
|
748
|
+
tab_follow.rule_343 = tab_follow.rule_342
|
749
|
+
tab_follow.rule_345 = set_firsts { ',', ':', 'TK_MANAGES' }
|
750
|
+
tab_follow.rule_347 = set_firsts { 'TK_PRIMARYKEY', '{' }
|
751
|
+
tab_follow.rule_348 = set_firsts { 'TK_SUPPORTS' }
|
752
|
+
tab_follow.rule_353 = set_firsts { '{' }
|
753
|
+
tab_follow.rule_359 = set_firsts { '}' }
|
754
|
+
tab_follow.rule_367 = set_firsts { ',', ')' }
|
755
|
+
tab_follow.rule_369 = set_firsts { ')' }
|
756
|
+
tab_follow.rule_600 = set_firsts { 'TK_STRING_LITERAL' }
|
757
|
+
|
758
|
+
local tab_follow_rule_error_msg = {
|
759
|
+
[32] = 'identifier',
|
760
|
+
[64] = "',' or '>'",
|
761
|
+
[154] = "',' or ')'",
|
762
|
+
[161] = "'char', 'boolean', 'octet', 'any', 'Object',"..
|
763
|
+
"'ValueBase', 'long', 'float', 'double', 'short'"..
|
764
|
+
"'unsigned', 'sequence', 'string', 'fixed', identifier,"..
|
765
|
+
"'struct', 'union', 'enum'",
|
766
|
+
[204] = "',', '{'",
|
767
|
+
[221] = "identifier",
|
768
|
+
[229] = "',', ')'",
|
769
|
+
[268] = "',', 'supports' or '{'",
|
770
|
+
[307] = "'{'",
|
771
|
+
[308] = "',' or '{'",
|
772
|
+
[345] = "':', ',' or 'manages'",
|
773
|
+
[316] = "',', '{'",
|
774
|
+
[332] = "identifier",
|
775
|
+
[600] = 'string literal',
|
776
|
+
}
|
777
|
+
|
778
|
+
local token = lex.token
|
779
|
+
|
780
|
+
local currentScope
|
781
|
+
local namespaces
|
782
|
+
-- It is a stack of roots.
|
783
|
+
local scopeRoots
|
784
|
+
local currentScopeName
|
785
|
+
local CORBAVisible
|
786
|
+
|
787
|
+
local tab_identifiers = {}
|
788
|
+
|
789
|
+
-- this a list of type declarations
|
790
|
+
local TAB_TYPEID = {
|
791
|
+
['CONST'] = 'const',
|
792
|
+
['NATIVE'] = 'native',
|
793
|
+
['CHAR'] = 'char',
|
794
|
+
['BOOLEAN'] = 'boolean',
|
795
|
+
['OCTET'] = 'octet',
|
796
|
+
['ANY'] = 'any',
|
797
|
+
['OBJECT'] = 'Object',
|
798
|
+
['VALUEBASE'] = 'valuebase',
|
799
|
+
['STRUCT'] = 'struct',
|
800
|
+
['FLOAT'] = 'float',
|
801
|
+
['SHORT'] = 'short',
|
802
|
+
['FLOAT'] = 'float',
|
803
|
+
['DOUBLE'] = 'double',
|
804
|
+
['USHORT'] = 'ushort',
|
805
|
+
['ULLONG'] = 'ulonglong',
|
806
|
+
['ULONG'] = 'ulong',
|
807
|
+
['LLONG'] = 'longlong',
|
808
|
+
['LDOUBLE'] = 'longdouble',
|
809
|
+
['LONG'] = 'long',
|
810
|
+
['STRING'] = 'string',
|
811
|
+
['FIXED'] = 'fixed',
|
812
|
+
['EXCEPTION'] = 'except',
|
813
|
+
['INTERFACE'] = 'interface',
|
814
|
+
['VOID'] = 'void',
|
815
|
+
['OPERATION'] = 'operation',
|
816
|
+
['TYPEDEF'] = 'typedef',
|
817
|
+
['ENUM'] = 'enum',
|
818
|
+
['SEQUENCE'] = 'sequence',
|
819
|
+
['ATTRIBUTE'] = 'attribute',
|
820
|
+
['MODULE'] = 'module',
|
821
|
+
['UNION'] = 'union',
|
822
|
+
['TYPECODE'] = 'TypeCode',
|
823
|
+
['COMPONENT'] = 'component',
|
824
|
+
['HOME'] = 'home',
|
825
|
+
['FACTORY'] = 'factory',
|
826
|
+
['FINDER'] = 'finder',
|
827
|
+
['VALUEBOX'] = 'valuebox',
|
828
|
+
['VALUETYPE'] = 'valuetype',
|
829
|
+
['EVENTTYPE'] = 'eventtype',
|
830
|
+
}
|
831
|
+
|
832
|
+
local TAB_BASICTYPE = {
|
833
|
+
['NATIVE'] = { _type = TAB_TYPEID['NATIVE'] },
|
834
|
+
['CHAR'] = { _type = TAB_TYPEID['CHAR'] },
|
835
|
+
['BOOLEAN'] = { _type = TAB_TYPEID['BOOLEAN'] },
|
836
|
+
['OCTET'] = { _type = TAB_TYPEID['OCTET'] },
|
837
|
+
['ANY'] = { _type = TAB_TYPEID['ANY'] },
|
838
|
+
['OBJECT'] = { _type = TAB_TYPEID['OBJECT'],
|
839
|
+
repID = 'IDL:omg.org/CORBA/Object:1.0' },
|
840
|
+
['VALUEBASE'] = { _type = TAB_TYPEID['VALUEBASE'] },
|
841
|
+
['FLOAT'] = { _type = TAB_TYPEID['FLOAT'] },
|
842
|
+
['SHORT'] = { _type = TAB_TYPEID['SHORT'] },
|
843
|
+
['FLOAT'] = { _type = TAB_TYPEID['FLOAT'] } ,
|
844
|
+
['DOUBLE'] = { _type = TAB_TYPEID['DOUBLE'] },
|
845
|
+
['USHORT'] = { _type = TAB_TYPEID['USHORT'] },
|
846
|
+
['ULLONG'] = { _type = TAB_TYPEID['ULLONG'] },
|
847
|
+
['ULONG'] = { _type = TAB_TYPEID['ULONG'] },
|
848
|
+
['LLONG'] = { _type = TAB_TYPEID['LLONG'] },
|
849
|
+
['LDOUBLE'] = { _type = TAB_TYPEID['LDOUBLE'] },
|
850
|
+
['LONG'] = { _type = TAB_TYPEID['LONG'] },
|
851
|
+
['FIXED'] = { _type = TAB_TYPEID['FIXED'] },
|
852
|
+
['VOID'] = { _type = TAB_TYPEID['VOID'] },
|
853
|
+
['STRING'] = { _type = TAB_TYPEID['STRING'] },
|
854
|
+
}
|
855
|
+
|
856
|
+
local TAB_IMPLICITTYPE = {
|
857
|
+
['TYPECODE'] = { _type = TAB_TYPEID['TYPECODE'],
|
858
|
+
repID = 'IDL:omg.org/CORBA/TypeCode:1.0' },
|
859
|
+
}
|
860
|
+
|
861
|
+
local tab_legal_type = {
|
862
|
+
[TAB_TYPEID.TYPEDEF] = true,
|
863
|
+
[TAB_TYPEID.STRUCT] = true,
|
864
|
+
[TAB_TYPEID.ENUM] = true,
|
865
|
+
[TAB_TYPEID.INTERFACE] = true,
|
866
|
+
[TAB_TYPEID.NATIVE] = true,
|
867
|
+
[TAB_TYPEID.UNION] = true,
|
868
|
+
[TAB_TYPEID.CHAR] = true,
|
869
|
+
[TAB_TYPEID.BOOLEAN] = true,
|
870
|
+
[TAB_TYPEID.OCTET] = true,
|
871
|
+
[TAB_TYPEID.ANY] = true,
|
872
|
+
[TAB_TYPEID.OBJECT] = true,
|
873
|
+
[TAB_TYPEID.VALUEBASE] = true,
|
874
|
+
[TAB_TYPEID.FLOAT] = true,
|
875
|
+
[TAB_TYPEID.DOUBLE] = true,
|
876
|
+
[TAB_TYPEID.SHORT] = true,
|
877
|
+
[TAB_TYPEID.USHORT] = true,
|
878
|
+
[TAB_TYPEID.ULLONG] = true,
|
879
|
+
[TAB_TYPEID.ULONG] = true,
|
880
|
+
[TAB_TYPEID.LLONG] = true,
|
881
|
+
[TAB_TYPEID.LDOUBLE] = true,
|
882
|
+
[TAB_TYPEID.LONG] = true,
|
883
|
+
[TAB_TYPEID.FIXED] = true,
|
884
|
+
[TAB_TYPEID.VOID] = true,
|
885
|
+
[TAB_TYPEID.TYPECODE] = true,
|
886
|
+
[TAB_TYPEID.SEQUENCE] = true,
|
887
|
+
[TAB_TYPEID.STRING] = true,
|
888
|
+
}
|
889
|
+
|
890
|
+
local tab_accept_definition = {
|
891
|
+
[TAB_TYPEID.STRUCT] = true,
|
892
|
+
[TAB_TYPEID.EXCEPTION] = true,
|
893
|
+
[TAB_TYPEID.INTERFACE] = true,
|
894
|
+
[TAB_TYPEID.MODULE] = true,
|
895
|
+
[TAB_TYPEID.COMPONENT] = true,
|
896
|
+
[TAB_TYPEID.HOME] = true,
|
897
|
+
[TAB_TYPEID.VALUETYPE] = true,
|
898
|
+
[TAB_TYPEID.EVENTTYPE] = true,
|
899
|
+
}
|
900
|
+
|
901
|
+
local tab_define_scope = {
|
902
|
+
[TAB_TYPEID.INTERFACE] = true,
|
903
|
+
[TAB_TYPEID.EXCEPTION] = true,
|
904
|
+
[TAB_TYPEID.OPERATION] = true,
|
905
|
+
[TAB_TYPEID.FACTORY] = true,
|
906
|
+
[TAB_TYPEID.STRUCT] = true,
|
907
|
+
[TAB_TYPEID.UNION] = true,
|
908
|
+
[TAB_TYPEID.MODULE] = true,
|
909
|
+
[TAB_TYPEID.COMPONENT] = true,
|
910
|
+
[TAB_TYPEID.VALUETYPE] = true,
|
911
|
+
}
|
912
|
+
|
913
|
+
local tab_is_contained = {
|
914
|
+
[TAB_TYPEID.ATTRIBUTE] = true,
|
915
|
+
[TAB_TYPEID.TYPEDEF] = true,
|
916
|
+
[TAB_TYPEID.INTERFACE] = true,
|
917
|
+
[TAB_TYPEID.OPERATION] = true,
|
918
|
+
[TAB_TYPEID.CONST] = true,
|
919
|
+
|
920
|
+
[TAB_TYPEID.STRUCT] = true,
|
921
|
+
[TAB_TYPEID.EXCEPTION] = true,
|
922
|
+
[TAB_TYPEID.MODULE] = true,
|
923
|
+
[TAB_TYPEID.ENUM] = true,
|
924
|
+
[TAB_TYPEID.UNION] = true,
|
925
|
+
[TAB_TYPEID.COMPONENT] = true,
|
926
|
+
[TAB_TYPEID.HOME] = true,
|
927
|
+
[TAB_TYPEID.VALUETYPE] = true,
|
928
|
+
[TAB_TYPEID.VALUEBOX] = true,
|
929
|
+
[TAB_TYPEID.EVENTTYPE] = true,
|
930
|
+
[TAB_TYPEID.TYPECODE] = true,
|
931
|
+
}
|
932
|
+
|
933
|
+
local TAB_VALUEEXPECTED = {
|
934
|
+
[lex.tab_tokens.TK_ID] = "<identifier>",
|
935
|
+
[lex.tab_tokens.TK_ABSTRACT] = "abstract",
|
936
|
+
[lex.tab_tokens.TK_ANY] = TAB_TYPEID.ANY,
|
937
|
+
[lex.tab_tokens.TK_ATTRIBUTE] = TAB_TYPEID.ATTRIBUTE,
|
938
|
+
[lex.tab_tokens.TK_BOOLEAN] = TAB_TYPEID.BOOLEAN,
|
939
|
+
[lex.tab_tokens.TK_CASE] = "case",
|
940
|
+
[lex.tab_tokens.TK_CHAR] = TAB_TYPEID.CHAR,
|
941
|
+
[lex.tab_tokens.TK_COMPONENT] = TAB_TYPEID.COMPONENT,
|
942
|
+
[lex.tab_tokens.TK_CONST] = TAB_TYPEID.CONST,
|
943
|
+
[lex.tab_tokens.TK_CONSUMES] = "consumes",
|
944
|
+
[lex.tab_tokens.TK_CONTEXT] = "context",
|
945
|
+
[lex.tab_tokens.TK_CUSTOM] = "custom",
|
946
|
+
[lex.tab_tokens.TK_DEFAULT] = "default",
|
947
|
+
[lex.tab_tokens.TK_DOUBLE] = TAB_TYPEID.DOUBLEF,
|
948
|
+
[lex.tab_tokens.TK_EXCEPTION] = TAB_TYPEID.EXCEPTION,
|
949
|
+
[lex.tab_tokens.TK_EMITS] = "emits",
|
950
|
+
[lex.tab_tokens.TK_ENUM] = TAB_TYPEID.ENUM,
|
951
|
+
[lex.tab_tokens.TK_EVENTTYPE] = TAB_TYPEID.EVENTTYPE,
|
952
|
+
[lex.tab_tokens.TK_FACTORY] = TAB_TYPEID.FACTORY,
|
953
|
+
[lex.tab_tokens.TK_FALSE] = "FALSE",
|
954
|
+
[lex.tab_tokens.TK_FINDER] = TAB_TYPEID.FINDER,
|
955
|
+
[lex.tab_tokens.TK_FIXED] = TAB_TYPEID.FIXED,
|
956
|
+
[lex.tab_tokens.TK_FLOAT] = TAB_TYPEID.FLOAT,
|
957
|
+
[lex.tab_tokens.TK_GETRAISES] = "getraises",
|
958
|
+
[lex.tab_tokens.TK_HOME] = TAB_TYPEID.HOME,
|
959
|
+
[lex.tab_tokens.TK_IMPORT] = "import",
|
960
|
+
[lex.tab_tokens.TK_IN] = "in",
|
961
|
+
[lex.tab_tokens.TK_INOUT] = "inout",
|
962
|
+
[lex.tab_tokens.TK_INTERFACE] = TAB_TYPEID.INTERFACE,
|
963
|
+
[lex.tab_tokens.TK_LOCAL] = "local",
|
964
|
+
[lex.tab_tokens.TK_LONG] = TAB_TYPEID.LONG,
|
965
|
+
[lex.tab_tokens.TK_MODULE] = TAB_TYPEID.MODULE,
|
966
|
+
[lex.tab_tokens.TK_MULTIPLE] = "multiple",
|
967
|
+
[lex.tab_tokens.TK_NATIVE] = TAB_TYPEID.NATIVE,
|
968
|
+
[lex.tab_tokens.TK_OBJECT] = TAB_TYPEID.OBJECT,
|
969
|
+
[lex.tab_tokens.TK_OCTET] = TAB_TYPEID.OCTET,
|
970
|
+
[lex.tab_tokens.TK_ONEWAY] = "oneway",
|
971
|
+
[lex.tab_tokens.TK_OUT] = "out",
|
972
|
+
[lex.tab_tokens.TK_PRIMARYKEY] = "primarykey",
|
973
|
+
[lex.tab_tokens.TK_PRIVATE] = "private",
|
974
|
+
[lex.tab_tokens.TK_PROVIDES] = "provides",
|
975
|
+
[lex.tab_tokens.TK_PUBLIC] = "public",
|
976
|
+
[lex.tab_tokens.TK_PUBLISHES] = "publishes",
|
977
|
+
[lex.tab_tokens.TK_RAISES] = "raises",
|
978
|
+
[lex.tab_tokens.TK_READONLY] = "readonly",
|
979
|
+
[lex.tab_tokens.TK_SETRAISES] = "setraises",
|
980
|
+
[lex.tab_tokens.TK_SEQUENCE] = "sequence",
|
981
|
+
[lex.tab_tokens.TK_SHORT] = TAB_TYPEID.SHORT,
|
982
|
+
[lex.tab_tokens.TK_STRING] = TAB_TYPEID.STRING,
|
983
|
+
[lex.tab_tokens.TK_STRUCT] = TAB_TYPEID.STRUCT,
|
984
|
+
[lex.tab_tokens.TK_SUPPORTS] = "supports",
|
985
|
+
[lex.tab_tokens.TK_SWITCH] = "switch",
|
986
|
+
[lex.tab_tokens.TK_TRUE] = "TRUE",
|
987
|
+
[lex.tab_tokens.TK_TRUNCATABLE] = "truncatable",
|
988
|
+
[lex.tab_tokens.TK_TYPEDEF] = TAB_TYPEID.TYPEDEF,
|
989
|
+
[lex.tab_tokens.TK_TYPEID] = "typeid",
|
990
|
+
[lex.tab_tokens.TK_TYPEPREFIX] = "typeprefix",
|
991
|
+
[lex.tab_tokens.TK_UNSIGNED] = "unsigned",
|
992
|
+
[lex.tab_tokens.TK_UNION] = TAB_TYPEID.UNION,
|
993
|
+
[lex.tab_tokens.TK_USES] = "uses",
|
994
|
+
[lex.tab_tokens.TK_VALUEBASE] = TAB_TYPEID.VALUEBASE,
|
995
|
+
[lex.tab_tokens.TK_VALUETYPE] = TAB_TYPEID.VALUETYPE,
|
996
|
+
[lex.tab_tokens.TK_VOID] = TAB_TYPEID.VOID,
|
997
|
+
[lex.tab_tokens.TK_WCHAR] = "wchar",
|
998
|
+
[lex.tab_tokens.TK_WSTRING] = "wstring",
|
999
|
+
[lex.tab_tokens.TK_INTEGER_LITERAL] = "<integer literal>",
|
1000
|
+
[lex.tab_tokens.TK_FLOAT_LITERAL] = "<float literal>",
|
1001
|
+
[lex.tab_tokens.TK_CHAR_LITERAL] = "<char literal>",
|
1002
|
+
[lex.tab_tokens.TK_WCHAR_LITERAL] = "<wchar literal>",
|
1003
|
+
[lex.tab_tokens.TK_STRING_LITERAL] = "<string literal>",
|
1004
|
+
[lex.tab_tokens.TK_WSTRING_LITERAL] = "<wstring literal>",
|
1005
|
+
[lex.tab_tokens.TK_FIXED_LITERAL] = "<fixed literal>",
|
1006
|
+
[lex.tab_tokens.TK_PRAGMA_PREFIX] = "<pragma prefix>",
|
1007
|
+
[lex.tab_tokens.TK_PRAGMA_ID] = "<pragma id>",
|
1008
|
+
[lex.tab_tokens.TK_MANAGES] = "manages",
|
1009
|
+
}
|
1010
|
+
|
1011
|
+
local rules = {}
|
1012
|
+
|
1013
|
+
|
1014
|
+
---
|
1015
|
+
-- Error reporting
|
1016
|
+
---------------------------------------------------------------------------------------------------
|
1017
|
+
local ERRMSG_DECLARED = "'%s' has already been declared"
|
1018
|
+
local ERRMSG_PARAMDECLARED = "parameter '%s' has already been declared"
|
1019
|
+
local ERRMSG_RAISESDECLARED = "raise '%s' has already been declared"
|
1020
|
+
local ERRMSG_OPDECLARED = "operation '%s' has already been declared"
|
1021
|
+
local ERRMSG_REDEFINITION = "redefinition of '%s'"
|
1022
|
+
local ERRMSG_NOTTYPE = "%s is not a legal type"
|
1023
|
+
local ERRMSG_UNDECLARED = "%s is an undeclared type"
|
1024
|
+
local ERRMSG_FORWARD = "There is a forward reference to %s, but it is not defined"
|
1025
|
+
|
1026
|
+
local tab_ERRORMSG ={
|
1027
|
+
[01] = "definition ('typedef', 'enum', 'native', 'union', 'struct', "..
|
1028
|
+
"'const', 'exception', 'abstract', 'local', "..
|
1029
|
+
"'interface', 'custom', 'valuetype', 'eventtype', "..
|
1030
|
+
"'module', 'typeid', 'typeprefix', 'component' or 'home')",
|
1031
|
+
[02] = "type declaration ('typedef', 'struct', 'union', 'enum' or 'native')",
|
1032
|
+
[03] = "type specification ('char', 'boolean', 'octet', 'any', 'Object', "..
|
1033
|
+
"'ValueBase', 'long', 'float', 'double', 'short', 'unsigned', 'sequence', "..
|
1034
|
+
"'string', 'fixed', identifier, 'struct', 'union', 'enum')",
|
1035
|
+
[04] = "simple type specification (base type, template type or a scoped name)",
|
1036
|
+
[05] = "base type specification ('char', 'boolean', 'octet', 'any', 'Object', "..
|
1037
|
+
"'ValueBase', 'long', 'float', 'double', 'short', 'unsigned')",
|
1038
|
+
[06] = "'float', 'double', 'short', 'unsigned' or 'long'",
|
1039
|
+
[07] = "'float' or 'double'",
|
1040
|
+
[08] = "'short' or 'unsigned'",
|
1041
|
+
[09] = "'long' or 'short'",
|
1042
|
+
--follows!?
|
1043
|
+
[10] = "'long'",
|
1044
|
+
[11] = "',' or ';'",
|
1045
|
+
[12] = "'[', ',' or ';'",
|
1046
|
+
[13] = "'-', '+', '~', '(', identifier, ':', <integer literal>,"..
|
1047
|
+
"<string literal>, <char literal>, <fixed literal>,"..
|
1048
|
+
"<float literal>, 'TRUE' or 'FALSE'",
|
1049
|
+
[14] = "'-', '+', '~'",
|
1050
|
+
[15] = "'(', identifier, ':', <integer literal>,"..
|
1051
|
+
"<string literal>, <char literal>, <fixed literal>,"..
|
1052
|
+
"<float literal>, 'TK_TRUE', 'TK_FALSE'",
|
1053
|
+
[16] = "<integer literal>, <string literal>, <char literal>,"..
|
1054
|
+
"<fixed literal>, <float literal>",
|
1055
|
+
[17] = "'TK_TRUE', 'TK_FALSE'",
|
1056
|
+
[18] = "'*', '/', '%', '+', '-', ']', ')', '>>', '<<', '&', '^', '|'",
|
1057
|
+
[19] = "'+', '-', '>>', '<<'",
|
1058
|
+
[20] = "'>>', '<<', '&'",
|
1059
|
+
[21] = "'&', '^'",
|
1060
|
+
[22] = "'^', '|'",
|
1061
|
+
[23] = "'|'",
|
1062
|
+
[24] = "you must entry with a positive integer",
|
1063
|
+
[25] = "you must entry with a integer",
|
1064
|
+
[26] = "'<' or identifier",
|
1065
|
+
[27] = "constructed type specification ('struct', 'union' or 'enum')",
|
1066
|
+
[28] = "type specification or '}'",
|
1067
|
+
[29] = "'short', 'unsigned', 'char', 'boolean', 'enum', identifier, '::'",
|
1068
|
+
[30] = "'case', 'default'",
|
1069
|
+
[31] = "'case', 'default' or type specification",
|
1070
|
+
[32] = "'case', 'default' or '}'",
|
1071
|
+
}
|
1072
|
+
|
1073
|
+
local function sinError(valueExpected)
|
1074
|
+
error(string.format("%s(line %i): %s expected, encountered '%s'." ,
|
1075
|
+
lex.srcfilename, lex.line, valueExpected, lex.tokenvalue), 2)
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
local function semanticError(error_msg)
|
1079
|
+
local scope = currentScope.absolute_name
|
1080
|
+
if (scope == '') then
|
1081
|
+
scope = 'GLOBAL'
|
1082
|
+
end
|
1083
|
+
error(string.format("%s(line %i):Scope:'%s': %s.", lex.srcfilename,
|
1084
|
+
lex.line, scope, error_msg), 2)
|
1085
|
+
end
|
1086
|
+
---------------------------------------------------------------------------------------------------
|
1087
|
+
|
1088
|
+
|
1089
|
+
---
|
1090
|
+
-- Auxiliar functions
|
1091
|
+
---------------------------------------------------------------------------------------------------
|
1092
|
+
local function getID()
|
1093
|
+
return lex.tokenvalue_previous
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
local function registerID(id)
|
1097
|
+
if (string.sub(id, 1, 2) == "::") then
|
1098
|
+
id = string.sub(id, 3)
|
1099
|
+
end
|
1100
|
+
tab_identifiers[string.upper(currentScope.absolute_name.."::"..id)] = true;
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
local function gotoFatherScope()
|
1104
|
+
if (scopeRoots[#scopeRoots].scope == currentScope.absolute_name) then
|
1105
|
+
table.remove(scopeRoots)
|
1106
|
+
end
|
1107
|
+
local currentRoot = scopeRoots[#scopeRoots].root
|
1108
|
+
if (currentScope._type == TAB_TYPEID.MODULE) then
|
1109
|
+
currentRoot = string.gsub(currentRoot, "::[^:]+$", "")
|
1110
|
+
scopeRoots[#scopeRoots].root = currentRoot
|
1111
|
+
elseif (currentScope._type == TAB_TYPEID.INTERFACE) or
|
1112
|
+
(currentScope._type == TAB_TYPEID.STRUCT) or
|
1113
|
+
(currentScope._type == TAB_TYPEID.UNION) or
|
1114
|
+
(currentScope._type == TAB_TYPEID.EXCEPTION)
|
1115
|
+
then
|
1116
|
+
currentScopeName = string.gsub(currentScopeName, "::[^:]+$", "")
|
1117
|
+
end
|
1118
|
+
currentScope = namespaces[currentScope.absolute_name].father_scope
|
1119
|
+
end
|
1120
|
+
|
1121
|
+
local function getAbsolutename(scope, name)
|
1122
|
+
return scope.absolute_name..'::'..name
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
local function dclName(name, target, value)
|
1126
|
+
local absolutename = getAbsolutename(currentScope, name)
|
1127
|
+
if namespaces[absolutename] then
|
1128
|
+
semanticError(string.format(ERRMSG_DECLARED, name))
|
1129
|
+
else
|
1130
|
+
if tab_identifiers[string.upper(absolutename)] then
|
1131
|
+
semanticError("collision with '"..name.."'")
|
1132
|
+
end
|
1133
|
+
namespaces[absolutename] = {namespace = name}
|
1134
|
+
if value then
|
1135
|
+
value.name = name
|
1136
|
+
table.insert(target, value)
|
1137
|
+
else
|
1138
|
+
table.insert(target, name)
|
1139
|
+
end
|
1140
|
+
end
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
local recognize
|
1144
|
+
|
1145
|
+
local function getToken()
|
1146
|
+
token = lex.lexer(idl)
|
1147
|
+
|
1148
|
+
for _, linemark in ipairs(lex.tab_linemarks) do
|
1149
|
+
if linemark['1'] then
|
1150
|
+
table.insert(scopeRoots, {root = '', scope = currentScope.absolute_name})
|
1151
|
+
elseif linemark['2'] then
|
1152
|
+
table.remove(scopeRoots)
|
1153
|
+
end
|
1154
|
+
end
|
1155
|
+
lex.tab_linemarks = {}
|
1156
|
+
|
1157
|
+
-- The ID Pragma
|
1158
|
+
-- #pragma ID <name> "<id>"
|
1159
|
+
if (token == lex.tab_tokens.TK_PRAGMA_ID) then
|
1160
|
+
token = lex.lexer(idl)
|
1161
|
+
local definition = rules.scoped_name(600)
|
1162
|
+
local repid = lex.tokenvalue
|
1163
|
+
recognize(lex.tab_tokens.TK_STRING_LITERAL)
|
1164
|
+
local absolutename = definition.absolute_name
|
1165
|
+
if namespaces[absolutename].pragmaID then
|
1166
|
+
if (definition.repID ~= repid) then
|
1167
|
+
semanticError("repository ID ever defined")
|
1168
|
+
end
|
1169
|
+
else
|
1170
|
+
namespaces[absolutename].pragmaID = true
|
1171
|
+
definition.repID = repid
|
1172
|
+
end
|
1173
|
+
-- The Prefix Pragma
|
1174
|
+
-- #pragma prefix "<string>"
|
1175
|
+
elseif (token == lex.tab_tokens.TK_PRAGMA_PREFIX) then
|
1176
|
+
token = lex.lexer(idl)
|
1177
|
+
local prefix = lex.tokenvalue
|
1178
|
+
if (scopeRoots[#scopeRoots].scope == currentScope.absolute_name) then
|
1179
|
+
table.remove(scopeRoots)
|
1180
|
+
end
|
1181
|
+
table.insert(scopeRoots, {root = prefix, scope = currentScope.absolute_name})
|
1182
|
+
recognize(lex.tab_tokens.TK_STRING_LITERAL)
|
1183
|
+
end
|
1184
|
+
return token
|
1185
|
+
end
|
1186
|
+
|
1187
|
+
function recognize(tokenExpected)
|
1188
|
+
if (tokenExpected == token) then
|
1189
|
+
token = getToken()
|
1190
|
+
else
|
1191
|
+
local valueExpected = TAB_VALUEEXPECTED[tokenExpected]
|
1192
|
+
if not valueExpected then
|
1193
|
+
valueExpected = "'"..tokenExpected.."'"
|
1194
|
+
end
|
1195
|
+
sinError(valueExpected)
|
1196
|
+
end
|
1197
|
+
end
|
1198
|
+
|
1199
|
+
local function updateGlobalName(type, name)
|
1200
|
+
local localName = ''
|
1201
|
+
local currentRoot = scopeRoots[#scopeRoots].root
|
1202
|
+
-- Whenever a module is encountered, the string "::" and the <name> are appended
|
1203
|
+
-- to the name of the current root.
|
1204
|
+
if (type == TAB_TYPEID.MODULE) then
|
1205
|
+
currentRoot = currentRoot..'::'..name
|
1206
|
+
-- Whenever a interface, struct, union or exception is encountered,
|
1207
|
+
-- the string "::" and the <name> are appended to the name of the current scope.
|
1208
|
+
elseif (
|
1209
|
+
(type == TAB_TYPEID.INTERFACE) or
|
1210
|
+
(type == TAB_TYPEID.STRUCT) or
|
1211
|
+
(type == TAB_TYPEID.UNION) or
|
1212
|
+
(type == TAB_TYPEID.EXCEPTION)
|
1213
|
+
)
|
1214
|
+
then
|
1215
|
+
currentScopeName = currentScopeName..'::'..name
|
1216
|
+
else
|
1217
|
+
localName = '::'..name
|
1218
|
+
end
|
1219
|
+
scopeRoots[#scopeRoots].root = currentRoot
|
1220
|
+
return currentRoot, currentScopeName, localName
|
1221
|
+
end
|
1222
|
+
|
1223
|
+
-- Define an OMG IDL definition.
|
1224
|
+
local function define(name, type, namespace)
|
1225
|
+
local absolutename = getAbsolutename(currentScope, name)
|
1226
|
+
local definitions
|
1227
|
+
|
1228
|
+
-- Esta defini��o j� foi declarada anteriormente?
|
1229
|
+
if (namespaces[absolutename]) then
|
1230
|
+
-- Um m�dulo est� sendo reaberto?
|
1231
|
+
if (
|
1232
|
+
(namespaces[absolutename].namespace._type == TAB_TYPEID.MODULE)
|
1233
|
+
and
|
1234
|
+
(type == TAB_TYPEID.MODULE)
|
1235
|
+
)
|
1236
|
+
then
|
1237
|
+
namespace = namespaces[absolutename].namespace
|
1238
|
+
currentScope = namespace
|
1239
|
+
updateGlobalName(type, name)
|
1240
|
+
return nil, namespace
|
1241
|
+
else
|
1242
|
+
semanticError(string.format(ERRMSG_REDEFINITION, name))
|
1243
|
+
end
|
1244
|
+
end
|
1245
|
+
|
1246
|
+
-- A defini��o j� foi declarada como forward?
|
1247
|
+
if forwardDeclarations[absolutename] then
|
1248
|
+
namespace = forwardDeclarations[absolutename]
|
1249
|
+
forwardDeclarations[absolutename] = nil
|
1250
|
+
end
|
1251
|
+
|
1252
|
+
if (not definitions and tab_accept_definition[type]) then
|
1253
|
+
definitions = {}
|
1254
|
+
end
|
1255
|
+
|
1256
|
+
local root, scope, localName = updateGlobalName(type, name)
|
1257
|
+
repID = root..scope..localName
|
1258
|
+
repID = string.gsub(string.gsub(repID, "^::", ""), "::", "/")
|
1259
|
+
|
1260
|
+
if (not namespace) then
|
1261
|
+
namespace = {}
|
1262
|
+
end
|
1263
|
+
|
1264
|
+
namespace.name = name
|
1265
|
+
namespace._type = type
|
1266
|
+
namespace.absolute_name = absolutename
|
1267
|
+
namespace.repID = "IDL:"..repID..":"..lex.PRAGMA_VERSION
|
1268
|
+
namespace.definitions = definitions
|
1269
|
+
|
1270
|
+
if (tab_is_contained[type] and currentScope ~= output) then
|
1271
|
+
table.insert(currentScope.definitions, namespace)
|
1272
|
+
elseif (type == TAB_TYPEID.FACTORY) then
|
1273
|
+
currentScope.initializers = currentScope.initializers or {}
|
1274
|
+
table.insert(currentScope.initializers, namespace)
|
1275
|
+
else
|
1276
|
+
table.insert(currentScope, namespace)
|
1277
|
+
end
|
1278
|
+
|
1279
|
+
if (tab_define_scope[type]) then
|
1280
|
+
namespaces[absolutename] = {
|
1281
|
+
father_scope = currentScope,
|
1282
|
+
namespace = namespace,
|
1283
|
+
}
|
1284
|
+
currentScope = namespace
|
1285
|
+
else
|
1286
|
+
namespaces[absolutename] = {namespace = namespace}
|
1287
|
+
end
|
1288
|
+
return true, namespace
|
1289
|
+
end
|
1290
|
+
|
1291
|
+
-- This is an auxiliar function for getDefinition().
|
1292
|
+
local function getTabDefinition(name)
|
1293
|
+
local namespace
|
1294
|
+
if namespaces[name] then
|
1295
|
+
namespace = namespaces[name].namespace
|
1296
|
+
end
|
1297
|
+
return namespace or forwardDeclarations[name]
|
1298
|
+
end
|
1299
|
+
|
1300
|
+
local function getDefinition(name, baseScope)
|
1301
|
+
local scope = currentScope
|
1302
|
+
-- Busca uma defini��o em um escopo previamente fornecido.
|
1303
|
+
if baseScope then
|
1304
|
+
local definition = getTabDefinition(baseScope..'::'..name)
|
1305
|
+
if (definition) then
|
1306
|
+
return definition
|
1307
|
+
end
|
1308
|
+
else
|
1309
|
+
while true do
|
1310
|
+
local absolutename = getAbsolutename(scope, name)
|
1311
|
+
local definition = getTabDefinition(absolutename)
|
1312
|
+
if definition then
|
1313
|
+
return definition
|
1314
|
+
end
|
1315
|
+
if (scope._type == TAB_TYPEID.INTERFACE) then
|
1316
|
+
-- Busca a defini��o nas interfaces de base.
|
1317
|
+
for _, base in ipairs(scope) do
|
1318
|
+
absolutename = getAbsolutename(namespaces[base.absolute_name].namespace, name)
|
1319
|
+
local definition = getTabDefinition(absolutename)
|
1320
|
+
if definition then
|
1321
|
+
return definition
|
1322
|
+
end
|
1323
|
+
end
|
1324
|
+
end
|
1325
|
+
-- Se a defini��o n�o foi encontrada no escopo atual, ent�o a busca continua
|
1326
|
+
-- no escopo *pai*.
|
1327
|
+
if (scope ~= output) then
|
1328
|
+
scope = namespaces[scope.absolute_name].father_scope
|
1329
|
+
else
|
1330
|
+
if (currentScope._type == TAB_TYPEID.UNION) then
|
1331
|
+
if (currentScope.switch._type == TAB_TYPEID.ENUM) then
|
1332
|
+
return namespaces[getAbsolutename(currentScope.switch, scope)].namespace
|
1333
|
+
end
|
1334
|
+
end
|
1335
|
+
break
|
1336
|
+
end
|
1337
|
+
end
|
1338
|
+
end
|
1339
|
+
semanticError(string.format(ERRMSG_UNDECLARED, name))
|
1340
|
+
end
|
1341
|
+
|
1342
|
+
-- Define uma declara��o forward.
|
1343
|
+
local function dclForward(name, type)
|
1344
|
+
local absolute_name = getAbsolutename(currentScope, name)
|
1345
|
+
local definition = namespaces[absolute_name] or
|
1346
|
+
forwardDeclarations[absolute_name]
|
1347
|
+
if not definition then
|
1348
|
+
definition = {name = name, _type = type, absolute_name = absolute_name}
|
1349
|
+
forwardDeclarations[absolute_name] = definition
|
1350
|
+
end
|
1351
|
+
return definition
|
1352
|
+
end
|
1353
|
+
---------------------------------------------------------------------------------------------------
|
1354
|
+
|
1355
|
+
|
1356
|
+
---
|
1357
|
+
-- GRAMMAR RULES
|
1358
|
+
--------------------------------------------------------------------------
|
1359
|
+
|
1360
|
+
rules.specification = function ()
|
1361
|
+
-- import_l()
|
1362
|
+
if (callbacks.start) then
|
1363
|
+
callbacks.start()
|
1364
|
+
end
|
1365
|
+
rules.definition_l()
|
1366
|
+
-- Is there any forward reference without definition?
|
1367
|
+
for definition, _ in pairs(forwardDeclarations) do
|
1368
|
+
semanticError(string.format(ERRMSG_FORWARD, definition))
|
1369
|
+
end
|
1370
|
+
if (callbacks.finish) then
|
1371
|
+
callbacks.finish()
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
|
1375
|
+
rules.definition_l = function ()
|
1376
|
+
if (tab_firsts.rule_11[token]) then
|
1377
|
+
rules.definition()
|
1378
|
+
rules.definition_l_r()
|
1379
|
+
else
|
1380
|
+
sinError(tab_ERRORMSG[01])
|
1381
|
+
end
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
rules.definition_l_r = function ()
|
1385
|
+
if (tab_firsts.rule_12[token]) then
|
1386
|
+
rules.definition()
|
1387
|
+
rules.definition_l_r()
|
1388
|
+
elseif (not token) then
|
1389
|
+
--empty
|
1390
|
+
else
|
1391
|
+
sinError(tab_ERRORMSG[01])
|
1392
|
+
end
|
1393
|
+
end
|
1394
|
+
|
1395
|
+
rules.definition = function ()
|
1396
|
+
if (tab_firsts.rule_14[token]) then
|
1397
|
+
rules.type_dcl()
|
1398
|
+
elseif (tab_firsts.rule_15[token]) then
|
1399
|
+
rules.const_dcl()
|
1400
|
+
elseif (tab_firsts.rule_16[token]) then
|
1401
|
+
rules.except_dcl()
|
1402
|
+
elseif (tab_firsts.rule_17[token]) then
|
1403
|
+
rules.inter_value_event()
|
1404
|
+
elseif (tab_firsts.rule_18[token]) then
|
1405
|
+
rules.module()
|
1406
|
+
elseif (tab_firsts.rule_19[token]) then
|
1407
|
+
rules.type_id_dcl()
|
1408
|
+
elseif (tab_firsts.rule_20[token]) then
|
1409
|
+
rules.type_prefix_dcl()
|
1410
|
+
elseif (tab_firsts.rule_21[token]) then
|
1411
|
+
rules.component()
|
1412
|
+
elseif (tab_firsts.rule_22[token]) then
|
1413
|
+
rules.home_dcl()
|
1414
|
+
end
|
1415
|
+
recognize(";")
|
1416
|
+
end
|
1417
|
+
|
1418
|
+
rules.const_dcl = function ()
|
1419
|
+
if (tab_firsts.rule_174[token]) then
|
1420
|
+
recognize(lex.tab_tokens.TK_CONST)
|
1421
|
+
local type = rules.const_type()
|
1422
|
+
recognize(lex.tab_tokens.TK_ID)
|
1423
|
+
local name = getID()
|
1424
|
+
recognize("=")
|
1425
|
+
local value = rules.positive_int_const(143)
|
1426
|
+
local const = {type = type, value = value}
|
1427
|
+
define(name, TAB_TYPEID.CONST, const)
|
1428
|
+
if (callbacks.const) then
|
1429
|
+
callbacks.const(const)
|
1430
|
+
end
|
1431
|
+
end
|
1432
|
+
end
|
1433
|
+
|
1434
|
+
rules.const_type = function ()
|
1435
|
+
if (tab_firsts.rule_175[token]) then
|
1436
|
+
return rules.float_type_or_int_type()
|
1437
|
+
elseif (tab_firsts.rule_176[token]) then
|
1438
|
+
recognize(lex.tab_tokens.TK_CHAR)
|
1439
|
+
return TAB_BASICTYPE.CHAR
|
1440
|
+
elseif (tab_firsts.rule_177[token]) then
|
1441
|
+
recognize(lex.tab_tokens.TK_BOOLEAN)
|
1442
|
+
return TAB_BASICTYPE.BOOLEAN
|
1443
|
+
elseif (tab_firsts.rule_178[token]) then
|
1444
|
+
recognize(lex.tab_tokens.TK_STRING)
|
1445
|
+
return TAB_BASICTYPE.STRING
|
1446
|
+
elseif (tab_firsts.rule_179[token]) then
|
1447
|
+
return rules.scoped_name(32)
|
1448
|
+
elseif (tab_firsts.rule_180[token]) then
|
1449
|
+
recognize(lex.tab_tokens.TK_OCTET)
|
1450
|
+
return TAB_BASICTYPE.OCTET
|
1451
|
+
elseif (tab_firsts.rule_181[token]) then
|
1452
|
+
recognize(lex.tab_tokens.TK_FIXED)
|
1453
|
+
return TAB_BASICTYPE.FIXED
|
1454
|
+
end
|
1455
|
+
end
|
1456
|
+
|
1457
|
+
rules.type_dcl = function ()
|
1458
|
+
if (tab_firsts.rule_23[token]) then
|
1459
|
+
recognize(lex.tab_tokens.TK_TYPEDEF)
|
1460
|
+
rules.type_declarator()
|
1461
|
+
elseif (tab_firsts.rule_24[token]) then
|
1462
|
+
rules.enum_type()
|
1463
|
+
elseif (tab_firsts.rule_25[token]) then
|
1464
|
+
recognize(lex.tab_tokens.TK_NATIVE)
|
1465
|
+
recognize(lex.tab_tokens.TK_ID)
|
1466
|
+
define(getID(), TAB_TYPEID.NATIVE)
|
1467
|
+
elseif (tab_firsts.rule_26[token]) then
|
1468
|
+
rules.union_or_struct()
|
1469
|
+
else
|
1470
|
+
sinError(tab_ERRORMSG[02])
|
1471
|
+
end
|
1472
|
+
end
|
1473
|
+
|
1474
|
+
rules.type_declarator = function ()
|
1475
|
+
local type = rules.type_spec()
|
1476
|
+
if (not tab_legal_type[type._type]) then
|
1477
|
+
semanticError(string.format(ERRMSG_NOTTYPE, type._type))
|
1478
|
+
end
|
1479
|
+
rules.type_dcl_name_l(type)
|
1480
|
+
end
|
1481
|
+
|
1482
|
+
rules.type_spec = function (numrule)
|
1483
|
+
if (tab_firsts.rule_28[token]) then
|
1484
|
+
return rules.simple_type_spec(numrule)
|
1485
|
+
elseif (tab_firsts.rule_29[token]) then
|
1486
|
+
return rules.constr_type_spec()
|
1487
|
+
else
|
1488
|
+
sinError(tab_ERRORMSG[03])
|
1489
|
+
end
|
1490
|
+
end
|
1491
|
+
|
1492
|
+
rules.simple_type_spec = function (numrule)
|
1493
|
+
if (tab_firsts.rule_30[token]) then
|
1494
|
+
return rules.base_type_spec()
|
1495
|
+
elseif (tab_firsts.rule_31[token]) then
|
1496
|
+
return rules.template_type_spec()
|
1497
|
+
elseif (tab_firsts.rule_32[token]) then
|
1498
|
+
tab = rules.scoped_name(numrule or 32)
|
1499
|
+
return tab
|
1500
|
+
else
|
1501
|
+
sinError(tab_ERRORMSG[04])
|
1502
|
+
end
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
rules.base_type_spec = function ()
|
1506
|
+
if (tab_firsts.rule_36[token]) then
|
1507
|
+
return rules.float_type_or_int_type()
|
1508
|
+
elseif (tab_firsts.rule_37[token]) then
|
1509
|
+
recognize(lex.tab_tokens.TK_CHAR)
|
1510
|
+
return TAB_BASICTYPE.CHAR
|
1511
|
+
elseif (tab_firsts.rule_38[token]) then
|
1512
|
+
recognize(lex.tab_tokens.TK_BOOLEAN)
|
1513
|
+
return TAB_BASICTYPE.BOOLEAN
|
1514
|
+
elseif (tab_firsts.rule_39[token]) then
|
1515
|
+
recognize(lex.tab_tokens.TK_OCTET)
|
1516
|
+
return TAB_BASICTYPE.OCTET
|
1517
|
+
elseif (tab_firsts.rule_40[token]) then
|
1518
|
+
recognize(lex.tab_tokens.TK_ANY)
|
1519
|
+
return TAB_BASICTYPE.ANY
|
1520
|
+
elseif (tab_firsts.rule_41[token]) then
|
1521
|
+
recognize(lex.tab_tokens.TK_OBJECT)
|
1522
|
+
return TAB_BASICTYPE.OBJECT
|
1523
|
+
elseif (tab_firsts.rule_42[token]) then
|
1524
|
+
recognize(lex.tab_tokens.TK_VALUEBASE)
|
1525
|
+
return TAB_BASICTYPE.VALUEBASE
|
1526
|
+
-- else
|
1527
|
+
-- sinError(tab_ERRORMSG[05])
|
1528
|
+
end
|
1529
|
+
end
|
1530
|
+
|
1531
|
+
rules.float_type_or_int_type = function ()
|
1532
|
+
if (tab_firsts.rule_43[token]) then
|
1533
|
+
return rules.floating_pt_type()
|
1534
|
+
elseif (tab_firsts.rule_44[token]) then
|
1535
|
+
return rules.integer_type(54)
|
1536
|
+
elseif (tab_firsts.rule_45[token]) then
|
1537
|
+
recognize(lex.tab_tokens.TK_LONG)
|
1538
|
+
return rules.long_or_double()
|
1539
|
+
else
|
1540
|
+
sinError(tab_ERRORMSG[06])
|
1541
|
+
end
|
1542
|
+
end
|
1543
|
+
|
1544
|
+
rules.floating_pt_type = function ()
|
1545
|
+
if (tab_firsts.rule_46[token]) then
|
1546
|
+
recognize(lex.tab_tokens.TK_FLOAT)
|
1547
|
+
return TAB_BASICTYPE.FLOAT
|
1548
|
+
elseif (tab_firsts.rule_47[token]) then
|
1549
|
+
recognize(lex.tab_tokens.TK_DOUBLE)
|
1550
|
+
return TAB_BASICTYPE.DOUBLE
|
1551
|
+
-- else
|
1552
|
+
-- sinError(tab_ERRORMSG[07])
|
1553
|
+
end
|
1554
|
+
end
|
1555
|
+
|
1556
|
+
rules.integer_type = function (numrule)
|
1557
|
+
if (tab_firsts.rule_48[token]) then
|
1558
|
+
recognize(lex.tab_tokens.TK_SHORT)
|
1559
|
+
return TAB_BASICTYPE.SHORT
|
1560
|
+
elseif (tab_firsts.rule_49[token]) then
|
1561
|
+
return rules.unsigned_int(numrule)
|
1562
|
+
-- else
|
1563
|
+
-- sinError(tab_ERRORMSG[08])
|
1564
|
+
end
|
1565
|
+
end
|
1566
|
+
|
1567
|
+
rules.unsigned_int = function (numrule)
|
1568
|
+
recognize(lex.tab_tokens.TK_UNSIGNED)
|
1569
|
+
return rules.unsigned_int_tail(numrule)
|
1570
|
+
end
|
1571
|
+
|
1572
|
+
rules.unsigned_int_tail = function (numrule)
|
1573
|
+
if (tab_firsts.rule_51[token]) then
|
1574
|
+
recognize(lex.tab_tokens.TK_LONG)
|
1575
|
+
return rules.ulong_e(numrule)
|
1576
|
+
elseif (tab_firsts.rule_52[token]) then
|
1577
|
+
recognize(lex.tab_tokens.TK_SHORT)
|
1578
|
+
return TAB_BASICTYPE.USHORT
|
1579
|
+
else
|
1580
|
+
sinError(tab_ERRORMSG[09])
|
1581
|
+
end
|
1582
|
+
end
|
1583
|
+
|
1584
|
+
rules.long_e = function (numrule)
|
1585
|
+
if (tab_firsts.rule_53[token]) then
|
1586
|
+
recognize(lex.tab_tokens.TK_LONG)
|
1587
|
+
return TAB_BASICTYPE.LLONG
|
1588
|
+
elseif (tab_follow['rule_'..numrule][token]) then
|
1589
|
+
return TAB_BASICTYPE.LONG
|
1590
|
+
--empty
|
1591
|
+
else
|
1592
|
+
sinError(tab_ERRORMSG[10])
|
1593
|
+
end
|
1594
|
+
end
|
1595
|
+
|
1596
|
+
rules.ulong_e = function (numrule)
|
1597
|
+
if (tab_firsts.rule_53[token]) then
|
1598
|
+
recognize(lex.tab_tokens.TK_LONG)
|
1599
|
+
return TAB_BASICTYPE.ULLONG
|
1600
|
+
elseif (tab_follow['rule_'..numrule][token]) then
|
1601
|
+
return TAB_BASICTYPE.ULONG
|
1602
|
+
--empty
|
1603
|
+
else
|
1604
|
+
sinError(tab_ERRORMSG[10])
|
1605
|
+
end
|
1606
|
+
end
|
1607
|
+
|
1608
|
+
rules.type_dcl_name_l = function (type)
|
1609
|
+
rules.type_dcl_name(type)
|
1610
|
+
rules.type_dcl_name_l_r(type)
|
1611
|
+
end
|
1612
|
+
|
1613
|
+
rules.type_dcl_name_l_r = function (type)
|
1614
|
+
if (tab_firsts.rule_142[token]) then
|
1615
|
+
recognize(",")
|
1616
|
+
rules.type_dcl_name(type)
|
1617
|
+
rules.type_dcl_name_l_r(type)
|
1618
|
+
elseif (tab_follow.rule_143 [token]) then
|
1619
|
+
--empty
|
1620
|
+
else
|
1621
|
+
sinError(tab_ERRORMSG[11])
|
1622
|
+
end
|
1623
|
+
end
|
1624
|
+
|
1625
|
+
rules.type_dcl_name = function (type)
|
1626
|
+
recognize(lex.tab_tokens.TK_ID)
|
1627
|
+
local name = getID()
|
1628
|
+
local typedef = {original_type = rules.fixed_array_size_l(type)}
|
1629
|
+
define(name, TAB_TYPEID.TYPEDEF, typedef)
|
1630
|
+
if (callbacks.typedef) then
|
1631
|
+
callbacks.typedef(typedef)
|
1632
|
+
end
|
1633
|
+
end
|
1634
|
+
|
1635
|
+
-- without revision
|
1636
|
+
rules.fixed_array_size_l = function (tab_type_spec)
|
1637
|
+
if (tab_firsts.rule_145[token]) then
|
1638
|
+
local array = {
|
1639
|
+
length = rules.fixed_array_size(tab_type_spec),
|
1640
|
+
elementtype = rules.fixed_array_size_l(tab_type_spec),
|
1641
|
+
_type = 'array'
|
1642
|
+
}
|
1643
|
+
if callbacks.array then
|
1644
|
+
callbacks.array(array)
|
1645
|
+
end
|
1646
|
+
return array
|
1647
|
+
elseif (tab_follow.rule_146[token]) then
|
1648
|
+
--empty
|
1649
|
+
return tab_type_spec
|
1650
|
+
else
|
1651
|
+
sinError(tab_ERRORMSG[12])
|
1652
|
+
end
|
1653
|
+
end
|
1654
|
+
|
1655
|
+
rules.fixed_array_size = function (tab_type_spec)
|
1656
|
+
recognize("[")
|
1657
|
+
local const = rules.positive_int_const(147)
|
1658
|
+
recognize("]")
|
1659
|
+
return const
|
1660
|
+
end
|
1661
|
+
|
1662
|
+
-- without revision
|
1663
|
+
--without revision
|
1664
|
+
--without bitwise logical operations
|
1665
|
+
rules.positive_int_const = function (numrule)
|
1666
|
+
if tab_firsts.rule_75[token] then
|
1667
|
+
local const1 = rules.xor_expr(numrule)
|
1668
|
+
rules.or_expr_l(numrule)
|
1669
|
+
if type(const1) == "string" and string.find(const1, '[%d]') then
|
1670
|
+
const1 = tonumber(const1)
|
1671
|
+
if const1 < 0 then
|
1672
|
+
semanticError(tab_ERRORMSG[24])
|
1673
|
+
end
|
1674
|
+
end
|
1675
|
+
return const1
|
1676
|
+
else
|
1677
|
+
sinError(tab_ERRORMSG[13])
|
1678
|
+
end
|
1679
|
+
end
|
1680
|
+
|
1681
|
+
|
1682
|
+
rules.xor_expr = function (numrule)
|
1683
|
+
if tab_firsts.rule_93[token] then
|
1684
|
+
local exp1 = rules.and_expr(numrule)
|
1685
|
+
rules.xor_expr_l(numrule)
|
1686
|
+
return exp1
|
1687
|
+
-- else
|
1688
|
+
-- sinError(tab_ERRORMSG[13])
|
1689
|
+
end
|
1690
|
+
end
|
1691
|
+
|
1692
|
+
|
1693
|
+
rules.and_expr = function (numrule)
|
1694
|
+
if tab_firsts.rule_96[token] then
|
1695
|
+
local const1 = rules.shift_expr(numrule)
|
1696
|
+
return rules.and_expr_l(const1, numrule)
|
1697
|
+
-- else
|
1698
|
+
-- sinError(tab_ERRORMSG[13])
|
1699
|
+
end
|
1700
|
+
end
|
1701
|
+
|
1702
|
+
|
1703
|
+
rules.shift_expr = function (numrule)
|
1704
|
+
if tab_firsts.rule_99[token] then
|
1705
|
+
local const1 = rules.add_expr(numrule)
|
1706
|
+
return rules.shift_expr_l(const1, numrule)
|
1707
|
+
-- else
|
1708
|
+
-- sinError(tab_ERRORMSG[13])
|
1709
|
+
end
|
1710
|
+
end
|
1711
|
+
|
1712
|
+
|
1713
|
+
rules.add_expr = function (numrule)
|
1714
|
+
if tab_firsts.rule_103[token] then
|
1715
|
+
local const1 = rules.mult_expr(numrule)
|
1716
|
+
return rules.add_expr_l(const1, numrule)
|
1717
|
+
-- else
|
1718
|
+
-- sinError(tab_ERRORMSG[13])
|
1719
|
+
end
|
1720
|
+
end
|
1721
|
+
|
1722
|
+
|
1723
|
+
rules.mult_expr = function (numrule)
|
1724
|
+
if tab_firsts.rule_107[token] then
|
1725
|
+
local const = rules.unary_expr()
|
1726
|
+
--[[ if not is_num(const) then
|
1727
|
+
semanticError(tab_ERRORMSG[25])
|
1728
|
+
end
|
1729
|
+
]]
|
1730
|
+
const = rules.mult_expr_l(const, numrule)
|
1731
|
+
return const
|
1732
|
+
-- else
|
1733
|
+
-- sinError(tab_ERRORMSG[13])
|
1734
|
+
end
|
1735
|
+
end
|
1736
|
+
|
1737
|
+
|
1738
|
+
--semantic of '~' operator ???!!
|
1739
|
+
rules.unary_expr = function ()
|
1740
|
+
if tab_firsts.rule_112[token] then
|
1741
|
+
local op = rules.unary_operator()
|
1742
|
+
local exp = rules.primary_expr()
|
1743
|
+
if tonumber(exp) then
|
1744
|
+
if op == '-' then
|
1745
|
+
exp = tonumber('-'..exp)
|
1746
|
+
elseif op == '+' then
|
1747
|
+
exp = tonumber('+'..exp)
|
1748
|
+
end
|
1749
|
+
end
|
1750
|
+
return exp
|
1751
|
+
elseif tab_firsts.rule_113[token] then
|
1752
|
+
return rules.primary_expr()
|
1753
|
+
-- else
|
1754
|
+
-- sinError(tab_ERRORMSG[13])
|
1755
|
+
end
|
1756
|
+
end
|
1757
|
+
|
1758
|
+
rules.unary_operator = function ()
|
1759
|
+
if tab_firsts.rule_114[token] then
|
1760
|
+
recognize("-")
|
1761
|
+
return '-'
|
1762
|
+
elseif tab_firsts.rule_115[token] then
|
1763
|
+
recognize("+")
|
1764
|
+
return '+'
|
1765
|
+
elseif tab_firsts.rule_116[token] then
|
1766
|
+
recognize("~")
|
1767
|
+
return '~'
|
1768
|
+
-- else
|
1769
|
+
-- sinError(tab_ERRORMSG[14])
|
1770
|
+
end
|
1771
|
+
end
|
1772
|
+
|
1773
|
+
|
1774
|
+
rules.primary_expr = function ()
|
1775
|
+
if tab_firsts.rule_117[token] then
|
1776
|
+
local value = rules.case_label_aux()
|
1777
|
+
if type(value) == 'table' then
|
1778
|
+
sinError("The <scoped_name> in the <const_type> production must be a previously \
|
1779
|
+
defined name of an <integer_type>, <char_type>, <wide_char_type>, \
|
1780
|
+
<boolean_type>, <floating_pt_type>, \
|
1781
|
+
<string_type>, <wide_string_type>, <octet_type>, or <enum_type> constant.")
|
1782
|
+
end
|
1783
|
+
return value
|
1784
|
+
elseif tab_firsts.rule_118[token] then
|
1785
|
+
local value = rules.literal()
|
1786
|
+
if (currentScope._type == TAB_TYPEID.UNION) then
|
1787
|
+
recognize(":")
|
1788
|
+
end
|
1789
|
+
return value
|
1790
|
+
elseif tab_firsts.rule_119[token] then
|
1791
|
+
recognize("(")
|
1792
|
+
local const = rules.positive_int_const(119)
|
1793
|
+
recognize(")")
|
1794
|
+
return const
|
1795
|
+
else
|
1796
|
+
sinError(tab_ERRORMSG[15])
|
1797
|
+
end
|
1798
|
+
end
|
1799
|
+
|
1800
|
+
rules.literal = function ()
|
1801
|
+
if tab_firsts.rule_120[token] then
|
1802
|
+
recognize(lex.tab_tokens.TK_INTEGER_LITERAL)
|
1803
|
+
return getID()
|
1804
|
+
elseif tab_firsts.rule_121[token] then
|
1805
|
+
recognize(lex.tab_tokens.TK_STRING_LITERAL)
|
1806
|
+
return getID()
|
1807
|
+
elseif tab_firsts.rule_122[token] then
|
1808
|
+
recognize(lex.tab_tokens.TK_CHAR_LITERAL)
|
1809
|
+
return getID()
|
1810
|
+
elseif tab_firsts.rule_123[token] then
|
1811
|
+
recognize(lex.tab_tokens.TK_FIXED_LITERAL)
|
1812
|
+
return getID()
|
1813
|
+
elseif tab_firsts.rule_124[token] then
|
1814
|
+
recognize(lex.tab_tokens.TK_FLOAT_LITERAL)
|
1815
|
+
return getID()
|
1816
|
+
elseif tab_firsts.rule_125[token] then
|
1817
|
+
return rules.boolean_literal()
|
1818
|
+
-- else
|
1819
|
+
-- sinError(tab_ERRORMSG[16])
|
1820
|
+
end
|
1821
|
+
end
|
1822
|
+
|
1823
|
+
|
1824
|
+
rules.boolean_literal = function ()
|
1825
|
+
if tab_firsts.rule_126[token] then
|
1826
|
+
recognize(lex.tab_tokens.TK_TRUE)
|
1827
|
+
return true
|
1828
|
+
elseif tab_firsts.rule_127[token] then
|
1829
|
+
recognize(lex.tab_tokens.TK_FALSE)
|
1830
|
+
return false
|
1831
|
+
-- else
|
1832
|
+
-- sinError(tab_ERRORMSG[17])
|
1833
|
+
end
|
1834
|
+
end
|
1835
|
+
|
1836
|
+
|
1837
|
+
rules.mult_expr_l = function (const1, numrule)
|
1838
|
+
if tab_firsts.rule_108[token] then
|
1839
|
+
recognize("*")
|
1840
|
+
local const2 = rules.unary_expr()
|
1841
|
+
if not tonumber(const2) then
|
1842
|
+
semanticError(tab_ERRORMSG[25])
|
1843
|
+
end
|
1844
|
+
local const = const1 * const2
|
1845
|
+
return rules.mult_expr_l(const, numrule)
|
1846
|
+
elseif tab_firsts.rule_109[token] then
|
1847
|
+
recognize("/")
|
1848
|
+
local const2 = rules.unary_expr()
|
1849
|
+
if not tonumber(const2) then
|
1850
|
+
semanticError(tab_ERRORMSG[25])
|
1851
|
+
end
|
1852
|
+
local const = const1 / const2
|
1853
|
+
return rules.mult_expr_l(const, numrule)
|
1854
|
+
elseif tab_firsts.rule_110[token] then
|
1855
|
+
recognize("%")
|
1856
|
+
local const2 = rules.unary_expr()
|
1857
|
+
if not tonumber(const2) then
|
1858
|
+
semanticError(tab_ERRORMSG[25])
|
1859
|
+
end
|
1860
|
+
local const = math.mod(const1, const2)
|
1861
|
+
return rules.mult_expr_l(const, numrule)
|
1862
|
+
elseif (
|
1863
|
+
tab_follow.rule_111[token] or
|
1864
|
+
tab_follow['rule_'..numrule][token] or
|
1865
|
+
(getID() == ':')
|
1866
|
+
)
|
1867
|
+
then
|
1868
|
+
--empty
|
1869
|
+
return const1
|
1870
|
+
else
|
1871
|
+
sinError(tab_ERRORMSG[18])
|
1872
|
+
end
|
1873
|
+
end
|
1874
|
+
|
1875
|
+
rules.add_expr_l = function (const1, numrule)
|
1876
|
+
if tab_firsts.rule_104[token] then
|
1877
|
+
recognize("+")
|
1878
|
+
if not tonumber(const1) then
|
1879
|
+
semanticError(tab_ERRORMSG[25])
|
1880
|
+
end
|
1881
|
+
local const2 = rules.mult_expr(numrule)
|
1882
|
+
local const = const1 + const2
|
1883
|
+
return rules.add_expr_l(const, numrule)
|
1884
|
+
elseif tab_firsts.rule_105[token] then
|
1885
|
+
recognize("-")
|
1886
|
+
if not tonumber(const1) then
|
1887
|
+
semanticError(tab_ERRORMSG[25])
|
1888
|
+
end
|
1889
|
+
local const2 = rules.mult_expr(numrule)
|
1890
|
+
local const = const1 - const2
|
1891
|
+
return rules.add_expr_l(const, numrule)
|
1892
|
+
elseif (
|
1893
|
+
tab_follow.rule_106[token] or
|
1894
|
+
tab_follow['rule_'..numrule][token] or
|
1895
|
+
(getID() == ':')
|
1896
|
+
)
|
1897
|
+
then
|
1898
|
+
--empty
|
1899
|
+
return const1
|
1900
|
+
else
|
1901
|
+
sinError(tab_ERRORMSG[19])
|
1902
|
+
end
|
1903
|
+
end
|
1904
|
+
|
1905
|
+
rules.shift_expr_l = function (const1, numrule)
|
1906
|
+
if tab_firsts.rule_100[token] then
|
1907
|
+
recognize(">>")
|
1908
|
+
rules.add_expr(numrule)
|
1909
|
+
rules.shift_expr_l(numrule)
|
1910
|
+
elseif tab_firsts.rule_101[token] then
|
1911
|
+
recognize("<<")
|
1912
|
+
rules.add_expr(numrule)
|
1913
|
+
rules.shift_expr_l(numrule)
|
1914
|
+
elseif (
|
1915
|
+
tab_follow.rule_102[token] or
|
1916
|
+
tab_follow['rule_'..numrule][token] or
|
1917
|
+
(getID() == ':')
|
1918
|
+
)
|
1919
|
+
then
|
1920
|
+
--empty
|
1921
|
+
return const1
|
1922
|
+
else
|
1923
|
+
sinError(tab_ERRORMSG[20])
|
1924
|
+
end
|
1925
|
+
end
|
1926
|
+
|
1927
|
+
rules.and_expr_l = function (const1, numrule)
|
1928
|
+
if tab_firsts.rule_97[token] then
|
1929
|
+
recognize("&")
|
1930
|
+
--[[ if not is_num(const1) then
|
1931
|
+
semanticError(tab_ERRORMSG[25])
|
1932
|
+
end]]
|
1933
|
+
local const2 = rulesshift_expr(numrule)
|
1934
|
+
-- local const = const1 and const2
|
1935
|
+
return rules.and_expr_l(const, numrule)
|
1936
|
+
elseif (
|
1937
|
+
tab_follow.rule_98[token] or
|
1938
|
+
tab_follow['rule_'..numrule][token] or
|
1939
|
+
(getID() == ':')
|
1940
|
+
)
|
1941
|
+
then
|
1942
|
+
--empty
|
1943
|
+
return const1
|
1944
|
+
else
|
1945
|
+
sinError(tab_ERRORMSG[21])
|
1946
|
+
end
|
1947
|
+
end
|
1948
|
+
|
1949
|
+
rules.xor_expr_l = function (numrule)
|
1950
|
+
if tab_firsts.rule_94[token] then
|
1951
|
+
recognize("^")
|
1952
|
+
rules.and_expr(numrule)
|
1953
|
+
rules.xor_expr_l(numrule)
|
1954
|
+
elseif (
|
1955
|
+
tab_follow.rule_95[token] or
|
1956
|
+
tab_follow['rule_'..numrule][token] or
|
1957
|
+
(getID() == ':')
|
1958
|
+
)
|
1959
|
+
then
|
1960
|
+
--empty
|
1961
|
+
else
|
1962
|
+
sinError(tab_ERRORMSG[22])
|
1963
|
+
end
|
1964
|
+
end
|
1965
|
+
|
1966
|
+
rules.or_expr_l = function (numrule)
|
1967
|
+
if tab_firsts.rule_91[token] then
|
1968
|
+
recognize("|")
|
1969
|
+
rules.xor_expr(numrule)
|
1970
|
+
rules.or_expr_l(numrule)
|
1971
|
+
elseif (
|
1972
|
+
tab_follow['rule_'..numrule][token] or
|
1973
|
+
(getID() == ':')
|
1974
|
+
)
|
1975
|
+
then
|
1976
|
+
--empty
|
1977
|
+
else
|
1978
|
+
sinError(tab_ERRORMSG[23])
|
1979
|
+
end
|
1980
|
+
end
|
1981
|
+
|
1982
|
+
rules.template_type_spec = function ()
|
1983
|
+
if tab_firsts.rule_58[token] then
|
1984
|
+
return rules.sequence_type()
|
1985
|
+
elseif tab_firsts.rule_59[token] then
|
1986
|
+
return rules.string_type()
|
1987
|
+
elseif tab_firsts.rule_60[token] then
|
1988
|
+
return rules.fixed_pt_type()
|
1989
|
+
end
|
1990
|
+
end
|
1991
|
+
|
1992
|
+
rules.sequence_type = function ()
|
1993
|
+
recognize(lex.tab_tokens.TK_SEQUENCE, "'sequence'")
|
1994
|
+
recognize("<")
|
1995
|
+
local tab_type_spec = rules.simple_type_spec(61)
|
1996
|
+
tab_type_spec = rules.sequence_type_tail(tab_type_spec)
|
1997
|
+
if callbacks.sequence then
|
1998
|
+
callbacks.sequence(tab_type_spec)
|
1999
|
+
end
|
2000
|
+
return tab_type_spec
|
2001
|
+
end
|
2002
|
+
|
2003
|
+
rules.sequence_type_tail = function (tab_type_spec)
|
2004
|
+
if tab_firsts.rule_69[token] then
|
2005
|
+
recognize(",")
|
2006
|
+
local const = rules.positive_int_const(69)
|
2007
|
+
recognize(">")
|
2008
|
+
return { _type = TAB_TYPEID.SEQUENCE, elementtype = tab_type_spec, maxlength = const }
|
2009
|
+
elseif tab_firsts.rule_70[token] then
|
2010
|
+
recognize(">")
|
2011
|
+
--maxlength??
|
2012
|
+
return { _type = TAB_TYPEID.SEQUENCE, elementtype = tab_type_spec, maxlength = 0 }
|
2013
|
+
else
|
2014
|
+
sinError("',' or '>'")
|
2015
|
+
end
|
2016
|
+
end
|
2017
|
+
|
2018
|
+
rules.string_type = function ()
|
2019
|
+
recognize(lex.tab_tokens.TK_STRING)
|
2020
|
+
--maxlength??
|
2021
|
+
return TAB_BASICTYPE.STRING
|
2022
|
+
end
|
2023
|
+
|
2024
|
+
|
2025
|
+
rules.string_type_tail = function ()
|
2026
|
+
if tab_firsts.rule_72[token] then
|
2027
|
+
recognize("<")
|
2028
|
+
local const = positive_int_const(72)
|
2029
|
+
recognize(">")
|
2030
|
+
return const
|
2031
|
+
elseif tab_follow.rule_73[token] then
|
2032
|
+
return nil
|
2033
|
+
--empty
|
2034
|
+
else
|
2035
|
+
sinError(tab_ERRORMSG[26])
|
2036
|
+
end
|
2037
|
+
end
|
2038
|
+
|
2039
|
+
rules.fixed_pt_type = function ()
|
2040
|
+
recognize(lex.tab_tokens.TK_FIXED)
|
2041
|
+
recognize("<")
|
2042
|
+
local const1 = rules.positive_int_const(74)
|
2043
|
+
recognize(",")
|
2044
|
+
local const2 = rules.positive_int_const(74)
|
2045
|
+
recognize(">")
|
2046
|
+
return TAB_BASICTYPE.FIXED
|
2047
|
+
end
|
2048
|
+
|
2049
|
+
rules.constr_type_spec = function ()
|
2050
|
+
if tab_firsts.rule_33[token] then
|
2051
|
+
return rules.struct_type()
|
2052
|
+
elseif tab_firsts.rule_34[token] then
|
2053
|
+
return rules.union_type()
|
2054
|
+
elseif tab_firsts.rule_35[token] then
|
2055
|
+
return rules.enum_type()
|
2056
|
+
else
|
2057
|
+
sinError(tab_ERRORMSG[27])
|
2058
|
+
end
|
2059
|
+
end
|
2060
|
+
|
2061
|
+
rules.struct_type = function ()
|
2062
|
+
recognize(lex.tab_tokens.TK_STRUCT)
|
2063
|
+
recognize(lex.tab_tokens.TK_ID)
|
2064
|
+
define(getID(), TAB_TYPEID.STRUCT)
|
2065
|
+
recognize("{")
|
2066
|
+
rules.member_l()
|
2067
|
+
local struct = currentScope
|
2068
|
+
gotoFatherScope()
|
2069
|
+
recognize("}")
|
2070
|
+
if callbacks.struct then
|
2071
|
+
callbacks.struct(struct)
|
2072
|
+
end
|
2073
|
+
return struct
|
2074
|
+
end
|
2075
|
+
|
2076
|
+
rules.union_type = function ()
|
2077
|
+
if tab_firsts.rule_148[token] then
|
2078
|
+
recognize(lex.tab_tokens.TK_UNION)
|
2079
|
+
recognize(lex.tab_tokens.TK_ID)
|
2080
|
+
local union_name = getID()
|
2081
|
+
recognize(lex.tab_tokens.TK_SWITCH)
|
2082
|
+
define(union_name, TAB_TYPEID.UNION)
|
2083
|
+
recognize("(")
|
2084
|
+
currentScope.switch = rules.switch_type_spec()
|
2085
|
+
recognize(")")
|
2086
|
+
recognize("{")
|
2087
|
+
currentScope.default = -1
|
2088
|
+
rules.case_l()
|
2089
|
+
recognize("}")
|
2090
|
+
local union = currentScope
|
2091
|
+
gotoFatherScope()
|
2092
|
+
if callbacks.union then
|
2093
|
+
callbacks.union(union)
|
2094
|
+
end
|
2095
|
+
return tab_union
|
2096
|
+
else
|
2097
|
+
sinError(tab_ERRORMSG[29])
|
2098
|
+
end
|
2099
|
+
end
|
2100
|
+
|
2101
|
+
rules.switch_type_spec = function ()
|
2102
|
+
if tab_firsts.rule_149[token] then
|
2103
|
+
return rules.integer_type(148)
|
2104
|
+
elseif tab_firsts.rule_150[token] then
|
2105
|
+
recognize(lex.tab_tokens.TK_LONG)
|
2106
|
+
return rules.long_e(148)
|
2107
|
+
elseif tab_firsts.rule_151[token] then
|
2108
|
+
recognize(lex.tab_tokens.TK_CHAR)
|
2109
|
+
return TAB_BASICTYPE.CHAR
|
2110
|
+
elseif tab_firsts.rule_152[token] then
|
2111
|
+
recognize(lex.tab_tokens.TK_BOOLEAN)
|
2112
|
+
return TAB_BASICTYPE.BOOLEAN
|
2113
|
+
elseif tab_firsts.rule_153[token] then
|
2114
|
+
recognize(lex.tab_tokens.TK_ENUM)
|
2115
|
+
return TAB_BASICTYPE.ENUM
|
2116
|
+
elseif tab_firsts.rule_154[token] then
|
2117
|
+
return rules.scoped_name(154)
|
2118
|
+
else
|
2119
|
+
sinError(tab_ERRORMSG[30])
|
2120
|
+
end
|
2121
|
+
end
|
2122
|
+
|
2123
|
+
rules.case_l = function ()
|
2124
|
+
if tab_firsts.rule_155[token] then
|
2125
|
+
rules.case()
|
2126
|
+
rules.case_l_r()
|
2127
|
+
else
|
2128
|
+
sinError(tab_ERRORMSG[31])
|
2129
|
+
end
|
2130
|
+
end
|
2131
|
+
|
2132
|
+
rules.case_l_r = function ()
|
2133
|
+
if tab_firsts.rule_156[token] then
|
2134
|
+
rules.case()
|
2135
|
+
rules.case_l_r()
|
2136
|
+
elseif tab_follow.rule_157[token] then
|
2137
|
+
--empty
|
2138
|
+
else
|
2139
|
+
sinError(tab_ERRORMSG[33])
|
2140
|
+
end
|
2141
|
+
end
|
2142
|
+
|
2143
|
+
rules.case = function ()
|
2144
|
+
if tab_firsts.rule_158[token] then
|
2145
|
+
local cases = rules.case_label_l()
|
2146
|
+
local tab_type_spec, name = rules.element_spec(cases)
|
2147
|
+
for i, case in pairs(cases) do
|
2148
|
+
if i == 1 then
|
2149
|
+
dclName(name, currentScope, {type = tab_type_spec, label = case})
|
2150
|
+
registerID(name);
|
2151
|
+
else
|
2152
|
+
table.insert(currentScope, {name = name, type = tab_type_spec, label = case})
|
2153
|
+
end
|
2154
|
+
if case == 'none' then
|
2155
|
+
currentScope.default = table.getn(currentScope)
|
2156
|
+
end
|
2157
|
+
end
|
2158
|
+
recognize(";")
|
2159
|
+
else
|
2160
|
+
sinError(tab_ERRORMSG[31])
|
2161
|
+
end
|
2162
|
+
end
|
2163
|
+
|
2164
|
+
rules.case_label_l = function ()
|
2165
|
+
local cases = {}
|
2166
|
+
if tab_firsts.rule_159[token] then
|
2167
|
+
rules.case_label(cases)
|
2168
|
+
rules.case_label_l_r(cases)
|
2169
|
+
else
|
2170
|
+
sinError(tab_ERRORMSG[31])
|
2171
|
+
end
|
2172
|
+
return cases
|
2173
|
+
end
|
2174
|
+
|
2175
|
+
rules.case_label_l_r = function (cases)
|
2176
|
+
if tab_firsts.rule_160[token] then
|
2177
|
+
rules.case_label(cases)
|
2178
|
+
rules.case_label_l_r(cases)
|
2179
|
+
elseif tab_follow.rule_161[token] then
|
2180
|
+
--empty
|
2181
|
+
else
|
2182
|
+
sinError(tab_ERRORMSG[32])
|
2183
|
+
end
|
2184
|
+
end
|
2185
|
+
|
2186
|
+
rules.case_label = function (cases)
|
2187
|
+
if (tab_firsts.rule_162[token]) then
|
2188
|
+
recognize(lex.tab_tokens.TK_CASE)
|
2189
|
+
local value = rules.positive_int_const(162)
|
2190
|
+
table.insert(cases, value)
|
2191
|
+
elseif (tab_firsts.rule_163[token]) then
|
2192
|
+
recognize(lex.tab_tokens.TK_DEFAULT)
|
2193
|
+
recognize(":")
|
2194
|
+
if (currentScope.default ~= -1) then
|
2195
|
+
semanticError("A default case can appear at most once.")
|
2196
|
+
else
|
2197
|
+
table.insert(cases, 'none')
|
2198
|
+
currentScope.default = 1
|
2199
|
+
end
|
2200
|
+
else
|
2201
|
+
sinError(tab_ERRORMSG[31])
|
2202
|
+
end
|
2203
|
+
end
|
2204
|
+
|
2205
|
+
rules.case_label_aux = function ()
|
2206
|
+
if (token == lex.tab_tokens.TK_ID) then
|
2207
|
+
recognize(lex.tab_tokens.TK_ID)
|
2208
|
+
tab_scope = getDefinition(getID())
|
2209
|
+
recognize(":")
|
2210
|
+
return rules.case_label_tail(tab_scope)
|
2211
|
+
elseif (token == ':') then
|
2212
|
+
recognize(":")
|
2213
|
+
recognize(":")
|
2214
|
+
recognize(lex.tab_tokens.TK_ID, "identifier")
|
2215
|
+
tab_scope = getDefinition(getID())
|
2216
|
+
recognize(":")
|
2217
|
+
return rules.case_label_tail(tab_scope)
|
2218
|
+
end
|
2219
|
+
end
|
2220
|
+
|
2221
|
+
rules.case_label_tail = function (tab_scope)
|
2222
|
+
if (token == ':') then
|
2223
|
+
recognize(":")
|
2224
|
+
return rules.case_label_tail_aux(tab_scope)
|
2225
|
+
elseif (tab_firsts.rule_28[token] or tab_firsts.rule_29[token]) then
|
2226
|
+
--empty
|
2227
|
+
return tab_scope
|
2228
|
+
end
|
2229
|
+
end
|
2230
|
+
|
2231
|
+
rules.case_label_tail_aux = function (tab_scope)
|
2232
|
+
if (token == ':') then
|
2233
|
+
recognize(":")
|
2234
|
+
elseif (token == lex.tab_tokens.TK_ID) then
|
2235
|
+
recognize(lex.tab_tokens.TK_ID)
|
2236
|
+
local namespace = getID()
|
2237
|
+
tab_scope = getDefinition(namespace, tab_scope.absolute_name)
|
2238
|
+
tab_scope = rules.case_label_tail_aux(tab_scope)
|
2239
|
+
end
|
2240
|
+
return tab_scope
|
2241
|
+
end
|
2242
|
+
|
2243
|
+
rules.element_spec = function (cases)
|
2244
|
+
if (tab_firsts.rule_164[token]) then
|
2245
|
+
local tab_type_spec = rules.type_spec(221)
|
2246
|
+
recognize(lex.tab_tokens.TK_ID)
|
2247
|
+
local name = getID()
|
2248
|
+
return tab_type_spec, name
|
2249
|
+
else
|
2250
|
+
sinError(tab_ERRORMSG[03])
|
2251
|
+
end
|
2252
|
+
end
|
2253
|
+
|
2254
|
+
rules.enum_type = function ()
|
2255
|
+
recognize(lex.tab_tokens.TK_ENUM)
|
2256
|
+
recognize(lex.tab_tokens.TK_ID)
|
2257
|
+
local _, tab_enum = define(getID(), TAB_TYPEID.ENUM)
|
2258
|
+
recognize("{")
|
2259
|
+
rules.enumerator(tab_enum)
|
2260
|
+
rules.enumerator_l(tab_enum)
|
2261
|
+
recognize("}")
|
2262
|
+
if callbacks.enum then
|
2263
|
+
callbacks.enum(tab_enum)
|
2264
|
+
end
|
2265
|
+
return tab_enum
|
2266
|
+
end
|
2267
|
+
|
2268
|
+
rules.enumerator = function (tab_enum)
|
2269
|
+
recognize(lex.tab_tokens.TK_ID)
|
2270
|
+
local name = getID()
|
2271
|
+
dclName(name, tab_enum)
|
2272
|
+
registerID(name);
|
2273
|
+
end
|
2274
|
+
|
2275
|
+
rules.enumerator_l = function (tab_enum)
|
2276
|
+
if (tab_firsts.rule_166[token]) then
|
2277
|
+
recognize(",")
|
2278
|
+
rules.enumerator(tab_enum)
|
2279
|
+
rules.enumerator_l(tab_enum)
|
2280
|
+
elseif (tab_follow.rule_167[token]) then
|
2281
|
+
-- empty
|
2282
|
+
else
|
2283
|
+
sinError("',' or '}'")
|
2284
|
+
end
|
2285
|
+
end
|
2286
|
+
|
2287
|
+
rules.module = function ()
|
2288
|
+
if (tab_firsts.rule_305[token]) then
|
2289
|
+
recognize(lex.tab_tokens.TK_MODULE)
|
2290
|
+
recognize(lex.tab_tokens.TK_ID)
|
2291
|
+
local name = getID()
|
2292
|
+
if (name == 'CORBA') then
|
2293
|
+
CORBAVisible = true
|
2294
|
+
end
|
2295
|
+
local status, _module = define(name, TAB_TYPEID.MODULE)
|
2296
|
+
recognize("{")
|
2297
|
+
rules.definition_l_module()
|
2298
|
+
local module = currentScope
|
2299
|
+
gotoFatherScope()
|
2300
|
+
recognize("}")
|
2301
|
+
if callbacks.module then
|
2302
|
+
callbacks.module(module)
|
2303
|
+
end
|
2304
|
+
end
|
2305
|
+
end
|
2306
|
+
|
2307
|
+
rules.long_or_double = function ()
|
2308
|
+
if tab_firsts.rule_55[token] then
|
2309
|
+
recognize(lex.tab_tokens.TK_LONG)
|
2310
|
+
return TAB_BASICTYPE.LLONG
|
2311
|
+
elseif tab_firsts.rule_56[token] then
|
2312
|
+
recognize(lex.tab_tokens.TK_DOUBLE)
|
2313
|
+
return TAB_BASICTYPE.LDOUBLE
|
2314
|
+
else
|
2315
|
+
return TAB_BASICTYPE.LONG
|
2316
|
+
end
|
2317
|
+
end
|
2318
|
+
|
2319
|
+
rules.scoped_name_l = function (tab_scope, full_namespace, num_follow_rule)
|
2320
|
+
if (token == ":") then
|
2321
|
+
recognize(":")
|
2322
|
+
recognize(":")
|
2323
|
+
recognize(lex.tab_tokens.TK_ID)
|
2324
|
+
local namespace = getID()
|
2325
|
+
full_namespace = tab_scope.absolute_name..'::'..namespace
|
2326
|
+
tab_scope = getDefinition(namespace, tab_scope.absolute_name)
|
2327
|
+
tab_scope = rules.scoped_name_l(tab_scope, full_namespace, num_follow_rule)
|
2328
|
+
elseif (tab_follow['rule_'..num_follow_rule][token]) then
|
2329
|
+
-- empty
|
2330
|
+
else
|
2331
|
+
sinError("':' or "..tab_follow_rule_error_msg[num_follow_rule])
|
2332
|
+
end
|
2333
|
+
return tab_scope
|
2334
|
+
end
|
2335
|
+
|
2336
|
+
rules.scoped_name = function (num_follow_rule)
|
2337
|
+
local name = ''
|
2338
|
+
local tab_scope = {}
|
2339
|
+
if (token == lex.tab_tokens.TK_ID) then
|
2340
|
+
recognize(lex.tab_tokens.TK_ID)
|
2341
|
+
name = getID()
|
2342
|
+
tab_scope = getDefinition(name)
|
2343
|
+
tab_scope = rules.scoped_name_l(tab_scope, name, num_follow_rule)
|
2344
|
+
elseif (token == ":") then
|
2345
|
+
recognize(":")
|
2346
|
+
recognize(":")
|
2347
|
+
recognize(lex.tab_tokens.TK_ID)
|
2348
|
+
name = getID()
|
2349
|
+
tab_scope = getDefinition(name)
|
2350
|
+
tab_scope = rules.scoped_name_l(tab_scope, name, num_follow_rule)
|
2351
|
+
end
|
2352
|
+
local absolute_name
|
2353
|
+
if (tab_scope.absolute_name) then
|
2354
|
+
absolute_name = tab_scope.absolute_name
|
2355
|
+
registerID(tab_scope.absolute_name)
|
2356
|
+
else
|
2357
|
+
end
|
2358
|
+
return tab_scope
|
2359
|
+
end
|
2360
|
+
|
2361
|
+
rules.union_or_struct = function ()
|
2362
|
+
if (tab_firsts.rule_168[token]) then
|
2363
|
+
recognize(lex.tab_tokens.TK_STRUCT)
|
2364
|
+
recognize(lex.tab_tokens.TK_ID)
|
2365
|
+
local name = getID()
|
2366
|
+
return rules.struct_tail(name)
|
2367
|
+
elseif (tab_firsts.rule_169[token]) then
|
2368
|
+
recognize(lex.tab_tokens.TK_UNION)
|
2369
|
+
recognize(lex.tab_tokens.TK_ID)
|
2370
|
+
define(getID(), TAB_TYPEID.UNION)
|
2371
|
+
rules.union_tail()
|
2372
|
+
local union = currentScope
|
2373
|
+
gotoFatherScope()
|
2374
|
+
if callbacks.union then
|
2375
|
+
callbacks.union(union)
|
2376
|
+
end
|
2377
|
+
return union
|
2378
|
+
else
|
2379
|
+
sinError("'struct' or 'union'")
|
2380
|
+
end
|
2381
|
+
end
|
2382
|
+
|
2383
|
+
rules.struct_tail = function (name)
|
2384
|
+
if (tab_firsts.rule_170[token]) then
|
2385
|
+
define(name, TAB_TYPEID.STRUCT)
|
2386
|
+
recognize("{")
|
2387
|
+
rules.member_l()
|
2388
|
+
recognize("}")
|
2389
|
+
local struct = currentScope
|
2390
|
+
gotoFatherScope()
|
2391
|
+
if callbacks.struct then
|
2392
|
+
callbacks.struct(struct)
|
2393
|
+
end
|
2394
|
+
return struct
|
2395
|
+
elseif (token == ";") then
|
2396
|
+
return dclForward(name, TAB_TYPEID.STRUCT)
|
2397
|
+
else
|
2398
|
+
sinError(" '{' or ';' ")
|
2399
|
+
end
|
2400
|
+
end
|
2401
|
+
|
2402
|
+
rules.member_l = function ()
|
2403
|
+
if (tab_firsts.rule_137[token]) then
|
2404
|
+
rules.member()
|
2405
|
+
rules.member_r()
|
2406
|
+
else
|
2407
|
+
sinError(tab_ERRORMSG[03])
|
2408
|
+
end
|
2409
|
+
end
|
2410
|
+
|
2411
|
+
rules.member = function ()
|
2412
|
+
if (tab_firsts.rule_140[token]) then
|
2413
|
+
rules.declarator_l(rules.type_spec())
|
2414
|
+
recognize(";")
|
2415
|
+
else
|
2416
|
+
sinError(tab_ERRORMSG[03])
|
2417
|
+
end
|
2418
|
+
end
|
2419
|
+
|
2420
|
+
rules.member_r = function ()
|
2421
|
+
if tab_firsts.rule_138[token] then
|
2422
|
+
rules.member()
|
2423
|
+
rules.member_r()
|
2424
|
+
elseif tab_follow.rule_139[token] then
|
2425
|
+
-- empty
|
2426
|
+
else
|
2427
|
+
sinError(tab_ERRORMSG[28])
|
2428
|
+
end
|
2429
|
+
end
|
2430
|
+
|
2431
|
+
rules.declarator_l = function (type, access)
|
2432
|
+
rules.declarator(type, access)
|
2433
|
+
rules.declarator_l_r(type, access)
|
2434
|
+
end
|
2435
|
+
|
2436
|
+
rules.declarator_l_r = function (type, access)
|
2437
|
+
if (tab_firsts.rule_142[token]) then
|
2438
|
+
recognize(",")
|
2439
|
+
rules.declarator(type, access)
|
2440
|
+
rules.declarator_l_r(type, access)
|
2441
|
+
elseif (tab_follow.rule_143[token]) then
|
2442
|
+
--empty
|
2443
|
+
else
|
2444
|
+
sinError(tab_ERRORMSG[11])
|
2445
|
+
end
|
2446
|
+
end
|
2447
|
+
|
2448
|
+
rules.declarator = function (type, access)
|
2449
|
+
recognize(lex.tab_tokens.TK_ID)
|
2450
|
+
local name = getID()
|
2451
|
+
dclName(name, currentScope,
|
2452
|
+
{
|
2453
|
+
type = rules.fixed_array_size_l(type),
|
2454
|
+
access = access,
|
2455
|
+
})
|
2456
|
+
registerID(name);
|
2457
|
+
end
|
2458
|
+
|
2459
|
+
rules.union_tail = function ()
|
2460
|
+
if (tab_firsts.rule_172[token]) then
|
2461
|
+
recognize(lex.tab_tokens.TK_SWITCH)
|
2462
|
+
recognize("(")
|
2463
|
+
currentScope.switch = rules.switch_type_spec()
|
2464
|
+
recognize(")")
|
2465
|
+
recognize("{")
|
2466
|
+
currentScope.default = -1
|
2467
|
+
rules.case_l()
|
2468
|
+
recognize("}")
|
2469
|
+
else
|
2470
|
+
sinError("'switch'")
|
2471
|
+
end
|
2472
|
+
end
|
2473
|
+
|
2474
|
+
rules.except_dcl = function ()
|
2475
|
+
recognize(lex.tab_tokens.TK_EXCEPTION)
|
2476
|
+
recognize(lex.tab_tokens.TK_ID)
|
2477
|
+
local name = getID()
|
2478
|
+
define(name, TAB_TYPEID.EXCEPTION)
|
2479
|
+
recognize("{")
|
2480
|
+
rules.member_l_empty()
|
2481
|
+
local except = currentScope
|
2482
|
+
gotoFatherScope()
|
2483
|
+
recognize("}")
|
2484
|
+
if callbacks.except then
|
2485
|
+
callbacks.except(except)
|
2486
|
+
end
|
2487
|
+
end
|
2488
|
+
|
2489
|
+
rules.member_l_empty = function ()
|
2490
|
+
if (tab_firsts.rule_187[token]) then
|
2491
|
+
rules.member()
|
2492
|
+
rules.member_l_empty()
|
2493
|
+
elseif (token == "}") then
|
2494
|
+
-- empty
|
2495
|
+
else
|
2496
|
+
sinError("member list { ... } or '}'")
|
2497
|
+
end
|
2498
|
+
end
|
2499
|
+
|
2500
|
+
rules.definition_l_r_module = function ()
|
2501
|
+
if (tab_firsts.rule_12[token]) then
|
2502
|
+
rules.definition()
|
2503
|
+
rules.definition_l_r_module()
|
2504
|
+
elseif (token == '}') then
|
2505
|
+
-- empty
|
2506
|
+
else
|
2507
|
+
sinError("definition")
|
2508
|
+
end
|
2509
|
+
end
|
2510
|
+
|
2511
|
+
rules.definition_l_module = function ()
|
2512
|
+
if (tab_firsts.rule_11[token]) then
|
2513
|
+
rules.definition()
|
2514
|
+
rules.definition_l_r_module()
|
2515
|
+
else
|
2516
|
+
sinError("definition")
|
2517
|
+
end
|
2518
|
+
end
|
2519
|
+
|
2520
|
+
|
2521
|
+
---
|
2522
|
+
-- INTERFACE DECLARATION
|
2523
|
+
--------------------------------------------------------------------------
|
2524
|
+
|
2525
|
+
rules.inter_value_event = function ()
|
2526
|
+
if (tab_firsts.rule_192[token]) then
|
2527
|
+
recognize(lex.tab_tokens.TK_INTERFACE)
|
2528
|
+
recognize(lex.tab_tokens.TK_ID)
|
2529
|
+
local name = getID()
|
2530
|
+
local interface = rules.interface_tail(name)
|
2531
|
+
if callbacks.interface then
|
2532
|
+
callbacks.interface(interface)
|
2533
|
+
end
|
2534
|
+
elseif (tab_firsts.rule_189[token]) then
|
2535
|
+
recognize(lex.tab_tokens.TK_ABSTRACT)
|
2536
|
+
rules.abstract_tail()
|
2537
|
+
elseif (tab_firsts.rule_190[token]) then
|
2538
|
+
recognize(lex.tab_tokens.TK_LOCAL)
|
2539
|
+
recognize(lex.tab_tokens.TK_INTERFACE)
|
2540
|
+
recognize(lex.tab_tokens.TK_ID)
|
2541
|
+
local name = getID()
|
2542
|
+
local interface = rules.interface_tail(name, 'local')
|
2543
|
+
if callbacks.interface and interface then
|
2544
|
+
callbacks.interface(interface)
|
2545
|
+
end
|
2546
|
+
elseif (tab_firsts.rule_193[token]) then
|
2547
|
+
recognize(lex.tab_tokens.TK_VALUETYPE)
|
2548
|
+
recognize(lex.tab_tokens.TK_ID)
|
2549
|
+
local name = getID()
|
2550
|
+
rules.value_tail(name)
|
2551
|
+
elseif (tab_firsts.rule_191[token]) then
|
2552
|
+
recognize(lex.tab_tokens.TK_CUSTOM)
|
2553
|
+
rules.value_or_event()
|
2554
|
+
elseif tab_firsts.rule_194[token] then
|
2555
|
+
recognize(lex.tab_tokens.TK_EVENTTYPE)
|
2556
|
+
recognize(lex.tab_tokens.TK_ID)
|
2557
|
+
local name = getID()
|
2558
|
+
local tab_eventtypescope = rules.eventtype_tail(name)
|
2559
|
+
if callbacks.eventtype then
|
2560
|
+
callbacks.eventtype(tab_eventtypescope)
|
2561
|
+
end
|
2562
|
+
else
|
2563
|
+
sinError("'interface', 'abstract', 'local' or 'valuetype'")
|
2564
|
+
end
|
2565
|
+
end
|
2566
|
+
|
2567
|
+
rules.abstract_tail = function ()
|
2568
|
+
if (tab_firsts.rule_195[token]) then
|
2569
|
+
recognize(lex.tab_tokens.TK_INTERFACE)
|
2570
|
+
recognize(lex.tab_tokens.TK_ID)
|
2571
|
+
local name = getID()
|
2572
|
+
local interface = rules.interface_tail(name, 'abstract')
|
2573
|
+
if callbacks.interface then
|
2574
|
+
callbacks.interface(interface)
|
2575
|
+
end
|
2576
|
+
elseif (tab_firsts.rule_196[token]) then
|
2577
|
+
recognize(lex.tab_tokens.TK_VALUETYPE)
|
2578
|
+
recognize(lex.tab_tokens.TK_ID)
|
2579
|
+
local name = getID()
|
2580
|
+
rules.value_tail(name, "abstract")
|
2581
|
+
elseif tab_firsts.rule_197[token] then
|
2582
|
+
recognize(lex.tab_tokens.TK_EVENTTYPE)
|
2583
|
+
recognize(lex.tab_tokens.TK_ID)
|
2584
|
+
local name = getID()
|
2585
|
+
local tab_eventtypescope = rules.eventtype_tail(name, "abstract")
|
2586
|
+
if callbacks.eventtype then
|
2587
|
+
callbacks.eventtype(tab_eventtypescope)
|
2588
|
+
end
|
2589
|
+
else
|
2590
|
+
sinError("'interface', 'valuetype' or 'event'")
|
2591
|
+
end
|
2592
|
+
end
|
2593
|
+
|
2594
|
+
rules.interface_tail = function (name, header)
|
2595
|
+
if (tab_firsts.rule_198[token]) then
|
2596
|
+
recognize(":")
|
2597
|
+
local base = rules.scoped_name(204)
|
2598
|
+
define(name, TAB_TYPEID.INTERFACE)
|
2599
|
+
table.insert(currentScope, base)
|
2600
|
+
rules.bases()
|
2601
|
+
recognize("{")
|
2602
|
+
rules.export_l()
|
2603
|
+
recognize("}")
|
2604
|
+
local interface = currentScope
|
2605
|
+
rules.verifyHeader(header)
|
2606
|
+
gotoFatherScope()
|
2607
|
+
return interface
|
2608
|
+
elseif (tab_firsts.rule_199[token]) then
|
2609
|
+
recognize("{")
|
2610
|
+
define(name, TAB_TYPEID.INTERFACE)
|
2611
|
+
rules.export_l()
|
2612
|
+
recognize("}")
|
2613
|
+
local interface = currentScope
|
2614
|
+
rules.verifyHeader(header)
|
2615
|
+
gotoFatherScope()
|
2616
|
+
return interface
|
2617
|
+
elseif (token == ';') then
|
2618
|
+
return dclForward(name, TAB_TYPEID.INTERFACE)
|
2619
|
+
else
|
2620
|
+
sinError("'{', ':' or ';'")
|
2621
|
+
end
|
2622
|
+
end
|
2623
|
+
|
2624
|
+
rules.bases = function ()
|
2625
|
+
if (tab_firsts.rule_254[token]) then
|
2626
|
+
recognize(",")
|
2627
|
+
local base = rules.scoped_name(204)
|
2628
|
+
table.insert(currentScope, base)
|
2629
|
+
rules.bases()
|
2630
|
+
elseif (token == '{') then
|
2631
|
+
-- empty
|
2632
|
+
else
|
2633
|
+
sinError("',' or '{'")
|
2634
|
+
end
|
2635
|
+
end
|
2636
|
+
|
2637
|
+
rules.verifyHeader = function (header)
|
2638
|
+
if (header == 'local') then
|
2639
|
+
currentScope['header'] = true
|
2640
|
+
elseif (header == 'abstract') then
|
2641
|
+
currentScope['abstract'] = true
|
2642
|
+
end
|
2643
|
+
end
|
2644
|
+
|
2645
|
+
rules.export_l = function ()
|
2646
|
+
if (tab_firsts.rule_207[token]) then
|
2647
|
+
rules.export()
|
2648
|
+
rules.export_l()
|
2649
|
+
elseif (token == "}") then
|
2650
|
+
--empty
|
2651
|
+
else
|
2652
|
+
sinError("empty interface, a declaration or '}'")
|
2653
|
+
end
|
2654
|
+
end
|
2655
|
+
|
2656
|
+
rules.export = function ()
|
2657
|
+
if (tab_firsts.rule_209[token]) then
|
2658
|
+
rules.type_dcl()
|
2659
|
+
recognize(";")
|
2660
|
+
elseif (tab_firsts.rule_210[token]) then
|
2661
|
+
rules.const_dcl()
|
2662
|
+
recognize(";")
|
2663
|
+
elseif (tab_firsts.rule_211[token]) then
|
2664
|
+
rules.except_dcl()
|
2665
|
+
recognize(";")
|
2666
|
+
elseif (tab_firsts.rule_212[token]) then
|
2667
|
+
rules.attr_dcl()
|
2668
|
+
recognize(";")
|
2669
|
+
elseif (tab_firsts.rule_213[token]) then
|
2670
|
+
rules.op_dcl()
|
2671
|
+
recognize(";")
|
2672
|
+
else
|
2673
|
+
sinError("constant, type, exception, attribute or operation declaration")
|
2674
|
+
end
|
2675
|
+
end
|
2676
|
+
|
2677
|
+
|
2678
|
+
---
|
2679
|
+
-- OPERATION DECLARATION
|
2680
|
+
--------------------------------------------------------------------------
|
2681
|
+
|
2682
|
+
rules.op_dcl = function ()
|
2683
|
+
if (tab_firsts.rule_243[token]) then
|
2684
|
+
recognize(lex.tab_tokens.TK_ONEWAY)
|
2685
|
+
local result = rules.op_type_spec()
|
2686
|
+
if (result._type ~= 'void') then
|
2687
|
+
semanticError("An operation with the oneway attribute must specify a 'void' return type.")
|
2688
|
+
end
|
2689
|
+
recognize(lex.tab_tokens.TK_ID)
|
2690
|
+
local name = getID()
|
2691
|
+
define(name, TAB_TYPEID.OPERATION)
|
2692
|
+
currentScope.name = name
|
2693
|
+
currentScope.oneway = true
|
2694
|
+
rules.parameter_dcls()
|
2695
|
+
rules.raises_expr_e(currentScope)
|
2696
|
+
rules.context_expr_e()
|
2697
|
+
local operation = currentScope
|
2698
|
+
gotoFatherScope()
|
2699
|
+
if (callbacks.operation) then
|
2700
|
+
callbacks.operation(operation)
|
2701
|
+
end
|
2702
|
+
elseif tab_firsts.rule_244[token] then
|
2703
|
+
local result = rules.op_type_spec()
|
2704
|
+
recognize(lex.tab_tokens.TK_ID)
|
2705
|
+
local name = getID()
|
2706
|
+
define(name, TAB_TYPEID.OPERATION)
|
2707
|
+
currentScope.name = name
|
2708
|
+
currentScope.result = result
|
2709
|
+
rules.parameter_dcls()
|
2710
|
+
rules.raises_expr_e(currentScope)
|
2711
|
+
rules.context_expr_e()
|
2712
|
+
local operation = currentScope
|
2713
|
+
gotoFatherScope()
|
2714
|
+
if callbacks.operation then
|
2715
|
+
callbacks.operation(operation)
|
2716
|
+
end
|
2717
|
+
else
|
2718
|
+
sinError("'oneway' or type specification")
|
2719
|
+
end
|
2720
|
+
end
|
2721
|
+
|
2722
|
+
rules.op_type_spec = function ()
|
2723
|
+
if (tab_firsts.rule_245[token]) then
|
2724
|
+
return rules.param_type_spec()
|
2725
|
+
elseif (tab_firsts.rule_246[token]) then
|
2726
|
+
recognize(lex.tab_tokens.TK_VOID)
|
2727
|
+
return TAB_BASICTYPE.VOID
|
2728
|
+
else
|
2729
|
+
sinError("type return")
|
2730
|
+
end
|
2731
|
+
end
|
2732
|
+
|
2733
|
+
rules.parameter_dcls = function ()
|
2734
|
+
recognize("(")
|
2735
|
+
rules.parameter_dcls_tail()
|
2736
|
+
end
|
2737
|
+
|
2738
|
+
rules.parameter_dcls_tail = function ()
|
2739
|
+
if (tab_firsts.rule_248[token]) then
|
2740
|
+
currentScope.parameters = {}
|
2741
|
+
rules.param_dcl()
|
2742
|
+
rules.param_dcl_l()
|
2743
|
+
recognize(")")
|
2744
|
+
elseif (tab_firsts.rule_249[token]) then
|
2745
|
+
recognize(")")
|
2746
|
+
else
|
2747
|
+
sinError("'in', 'out', 'inout' or ')'")
|
2748
|
+
end
|
2749
|
+
end
|
2750
|
+
|
2751
|
+
rules.param_dcl = function ()
|
2752
|
+
local attribute = rules.param_attribute()
|
2753
|
+
local type = rules.param_type_spec()
|
2754
|
+
recognize(lex.tab_tokens.TK_ID)
|
2755
|
+
local name = getID()
|
2756
|
+
dclName(name, currentScope.parameters, {mode = attribute, type = type})
|
2757
|
+
registerID(name);
|
2758
|
+
end
|
2759
|
+
|
2760
|
+
rules.param_dcl_l = function ()
|
2761
|
+
if (tab_firsts.rule_254[token]) then
|
2762
|
+
recognize(",")
|
2763
|
+
rules.param_dcl()
|
2764
|
+
rules.param_dcl_l()
|
2765
|
+
elseif token == lex.tab_tokens.TK_RAISES or
|
2766
|
+
token == lex.tab_tokens.TK_CONTEXT or
|
2767
|
+
token == ')' then
|
2768
|
+
-- empty
|
2769
|
+
else
|
2770
|
+
sinError("',', ')', 'raises' or 'context'")
|
2771
|
+
end
|
2772
|
+
end
|
2773
|
+
|
2774
|
+
rules.param_attribute = function ()
|
2775
|
+
if (tab_firsts.rule_251[token]) then
|
2776
|
+
recognize(lex.tab_tokens.TK_IN)
|
2777
|
+
return 'PARAM_IN'
|
2778
|
+
elseif (tab_firsts.rule_252[token]) then
|
2779
|
+
recognize(lex.tab_tokens.TK_OUT)
|
2780
|
+
return 'PARAM_OUT'
|
2781
|
+
elseif (tab_firsts.rule_253[token]) then
|
2782
|
+
recognize(lex.tab_tokens.TK_INOUT)
|
2783
|
+
return 'PARAM_INOUT'
|
2784
|
+
end
|
2785
|
+
end
|
2786
|
+
|
2787
|
+
rules.param_type_spec = function ()
|
2788
|
+
if (tab_firsts.rule_219[token]) then
|
2789
|
+
return rules.base_type_spec()
|
2790
|
+
elseif (tab_firsts.rule_220[token]) then
|
2791
|
+
return rules.string_type()
|
2792
|
+
elseif (tab_firsts.rule_221[token]) then
|
2793
|
+
return rules.scoped_name(221)
|
2794
|
+
else
|
2795
|
+
sinError('type specification')
|
2796
|
+
end
|
2797
|
+
end
|
2798
|
+
|
2799
|
+
rules.raises_expr = function (tab)
|
2800
|
+
recognize(lex.tab_tokens.TK_RAISES)
|
2801
|
+
recognize("(")
|
2802
|
+
tab.exceptions = {}
|
2803
|
+
rules.raises(tab.exceptions)
|
2804
|
+
rules.inter_name_seq(tab.exceptions)
|
2805
|
+
recognize(")")
|
2806
|
+
end
|
2807
|
+
|
2808
|
+
rules.raises = function (raises)
|
2809
|
+
local exception = rules.scoped_name(229)
|
2810
|
+
if (exception._type ~= TAB_TYPEID.EXCEPTION) then
|
2811
|
+
semanticError(string.format("The type of '%s' is %s, but it should be exception.",
|
2812
|
+
exception.absolute_name, exception._type))
|
2813
|
+
end
|
2814
|
+
table.insert(raises, exception)
|
2815
|
+
end
|
2816
|
+
|
2817
|
+
rules.inter_name_seq = function (_raises)
|
2818
|
+
if (tab_firsts.rule_254[token]) then
|
2819
|
+
recognize(",")
|
2820
|
+
rules.raises(_raises)
|
2821
|
+
rules.inter_name_seq(_raises)
|
2822
|
+
elseif (token == ')') then
|
2823
|
+
-- empty
|
2824
|
+
else
|
2825
|
+
sinError("')'")
|
2826
|
+
end
|
2827
|
+
end
|
2828
|
+
|
2829
|
+
rules.raises_expr_e = function (tab)
|
2830
|
+
if (tab_firsts.rule_370[token]) then
|
2831
|
+
rules.raises_expr(tab)
|
2832
|
+
elseif (token == ';' or token == lex.tab_tokens.TK_CONTEXT) then
|
2833
|
+
-- empty
|
2834
|
+
else
|
2835
|
+
sinError("'raises', 'context', ';'")
|
2836
|
+
end
|
2837
|
+
end
|
2838
|
+
|
2839
|
+
rules.context_expr_e = function ()
|
2840
|
+
if (tab_firsts.rule_377[token]) then
|
2841
|
+
rules.context_expr()
|
2842
|
+
elseif (token == ';') then
|
2843
|
+
-- empty
|
2844
|
+
else
|
2845
|
+
sinError("'context' or ';'")
|
2846
|
+
end
|
2847
|
+
end
|
2848
|
+
|
2849
|
+
rules.context_expr = function ()
|
2850
|
+
recognize(lex.tab_tokens.TK_CONTEXT)
|
2851
|
+
recognize("(")
|
2852
|
+
currentScope.contexts = {}
|
2853
|
+
rules.context()
|
2854
|
+
rules.string_literal_l()
|
2855
|
+
recognize(")")
|
2856
|
+
end
|
2857
|
+
|
2858
|
+
rules.context = function ()
|
2859
|
+
recognize(lex.tab_tokens.TK_STRING_LITERAL)
|
2860
|
+
local name = getID()
|
2861
|
+
dclName(name, currentScope.contexts, {})
|
2862
|
+
registerID(name);
|
2863
|
+
end
|
2864
|
+
|
2865
|
+
rules.string_literal_l = function ()
|
2866
|
+
if (tab_firsts.rule_257[token]) then
|
2867
|
+
recognize(",")
|
2868
|
+
rules.context()
|
2869
|
+
rules.string_literal_l()
|
2870
|
+
elseif (token == ')') then
|
2871
|
+
-- empty
|
2872
|
+
else
|
2873
|
+
sinError("',' or ')'")
|
2874
|
+
end
|
2875
|
+
end
|
2876
|
+
|
2877
|
+
|
2878
|
+
---
|
2879
|
+
-- ATTRIBUTE
|
2880
|
+
--------------------------------------------------------------------------
|
2881
|
+
|
2882
|
+
rules.attr_dcl = function ()
|
2883
|
+
if (tab_firsts.rule_216[token]) then
|
2884
|
+
rules.readonly_attr_spec()
|
2885
|
+
elseif (tab_firsts.rule_217[token]) then
|
2886
|
+
rules.attr_spec()
|
2887
|
+
else
|
2888
|
+
sinError("'readonly' or 'attribute'")
|
2889
|
+
end
|
2890
|
+
end
|
2891
|
+
|
2892
|
+
rules.readonly_attr_spec = function ()
|
2893
|
+
recognize(lex.tab_tokens.TK_READONLY)
|
2894
|
+
recognize(lex.tab_tokens.TK_ATTRIBUTE)
|
2895
|
+
local type = rules.param_type_spec()
|
2896
|
+
rules.readonly_attr_spec_dec(type)
|
2897
|
+
end
|
2898
|
+
|
2899
|
+
rules.attr_spec = function ()
|
2900
|
+
recognize(lex.tab_tokens.TK_ATTRIBUTE)
|
2901
|
+
local type = rules.param_type_spec()
|
2902
|
+
rules.attr_declarator(type)
|
2903
|
+
end
|
2904
|
+
|
2905
|
+
rules.readonly_attr_spec_dec = function (type)
|
2906
|
+
local attribute = {type = type, readonly = true}
|
2907
|
+
local name = rules.simple_dcl()
|
2908
|
+
define(name, TAB_TYPEID.ATTRIBUTE, attribute)
|
2909
|
+
rules.readonly_attr_spec_dec_tail(attribute)
|
2910
|
+
if callbacks.attribute then
|
2911
|
+
callbacks.attribute(attribute)
|
2912
|
+
end
|
2913
|
+
end
|
2914
|
+
|
2915
|
+
rules.attr_declarator = function (type)
|
2916
|
+
local attribute = {type = type}
|
2917
|
+
local name = rules.simple_dcl()
|
2918
|
+
define(name, TAB_TYPEID.ATTRIBUTE, attribute)
|
2919
|
+
rules.attr_declarator_tail(attribute)
|
2920
|
+
if callbacks.attribute then
|
2921
|
+
callbacks.attribute(attribute)
|
2922
|
+
end
|
2923
|
+
end
|
2924
|
+
|
2925
|
+
rules.readonly_attr_spec_dec_tail = function (attribute)
|
2926
|
+
if (tab_firsts.rule_227[token]) then
|
2927
|
+
rules.raises_expr(attribute)
|
2928
|
+
elseif (tab_firsts.rule_228[token]) then
|
2929
|
+
rules.simple_dcl_l(type, true)
|
2930
|
+
elseif (token == ';') then
|
2931
|
+
-- empty
|
2932
|
+
else
|
2933
|
+
sinError("'raises', ',' or ';'")
|
2934
|
+
end
|
2935
|
+
end
|
2936
|
+
|
2937
|
+
rules.attr_declarator_tail = function (attribute)
|
2938
|
+
if (tab_firsts.rule_234[token]) then
|
2939
|
+
rules.attr_raises_expr(attribute)
|
2940
|
+
elseif (tab_firsts.rule_235[token]) then
|
2941
|
+
rules.simple_dcl_l(attribute.type)
|
2942
|
+
elseif (token == ';') then
|
2943
|
+
-- empty
|
2944
|
+
else
|
2945
|
+
sinError("'getraises', 'setraises', ',' or ';'")
|
2946
|
+
end
|
2947
|
+
end
|
2948
|
+
|
2949
|
+
rules.simple_dcl = function ()
|
2950
|
+
recognize(lex.tab_tokens.TK_ID)
|
2951
|
+
return getID()
|
2952
|
+
end
|
2953
|
+
|
2954
|
+
rules.simple_dcl_l = function (type, readonly)
|
2955
|
+
if (tab_firsts.rule_142[token]) then
|
2956
|
+
recognize(",")
|
2957
|
+
local attribute = {type = type, readonly = readonly}
|
2958
|
+
local name = rules.simple_dcl()
|
2959
|
+
define(name, TAB_TYPEID.ATTRIBUTE, attribute)
|
2960
|
+
rules.simple_dcl_l(type)
|
2961
|
+
elseif (token == ';') then
|
2962
|
+
-- empty
|
2963
|
+
end
|
2964
|
+
end
|
2965
|
+
|
2966
|
+
rules.attr_raises_expr = function (attribute)
|
2967
|
+
if (tab_firsts.rule_236[token]) then
|
2968
|
+
recognize(lex.tab_tokens.TK_GETRAISES)
|
2969
|
+
attribute.raises = {}
|
2970
|
+
rules.exception_l(attribute, 'getraises')
|
2971
|
+
rules.attr_raises_expr_tail(attribute)
|
2972
|
+
elseif (tab_firsts.rule_237[token]) then
|
2973
|
+
recognize(lex.tab_tokens.TK_SETRAISES)
|
2974
|
+
attribute.raises = {}
|
2975
|
+
rules.exception_l(attribute, 'setraises')
|
2976
|
+
end
|
2977
|
+
end
|
2978
|
+
|
2979
|
+
rules.attr_raises_expr_tail = function (attribute)
|
2980
|
+
if (tab_firsts.rule_238[token]) then
|
2981
|
+
recognize(lex.tab_tokens.TK_SETRAISES)
|
2982
|
+
rules.exception_l(attribute, 'setraises')
|
2983
|
+
elseif (token == ';') then
|
2984
|
+
--empty
|
2985
|
+
else
|
2986
|
+
sinError("'setraises' or ';'")
|
2987
|
+
end
|
2988
|
+
end
|
2989
|
+
|
2990
|
+
rules.exception = function (attribute, raises_type)
|
2991
|
+
local exception = {type = raises_type, exception = rules.scoped_name(229)}
|
2992
|
+
table.insert(attribute.raises, exception)
|
2993
|
+
end
|
2994
|
+
|
2995
|
+
rules.exception_l = function (attribute, raises_type)
|
2996
|
+
recognize("(")
|
2997
|
+
rules.exception(attribute, raises_type)
|
2998
|
+
rules.exception_l_seq(attribute, raises_type)
|
2999
|
+
recognize(")")
|
3000
|
+
end
|
3001
|
+
|
3002
|
+
rules.exception_l_seq = function (attribute, raises_type)
|
3003
|
+
if (tab_firsts.rule_142[token]) then
|
3004
|
+
recognize(",")
|
3005
|
+
rules.exception(attribute, raises_type)
|
3006
|
+
rules.exception_l_seq(attribute, raises_type)
|
3007
|
+
elseif (token == ';') then
|
3008
|
+
-- empty
|
3009
|
+
end
|
3010
|
+
end
|
3011
|
+
|
3012
|
+
|
3013
|
+
---
|
3014
|
+
-- COMPONENT DECLARATION
|
3015
|
+
--------------------------------------------------------------------------
|
3016
|
+
|
3017
|
+
rules.component = function ()
|
3018
|
+
recognize(lex.tab_tokens.TK_COMPONENT)
|
3019
|
+
recognize(lex.tab_tokens.TK_ID)
|
3020
|
+
local name = getID()
|
3021
|
+
define(name, TAB_TYPEID.COMPONENT)
|
3022
|
+
currentScope.declarations = {}
|
3023
|
+
rules.component_tail(name)
|
3024
|
+
gotoFatherScope()
|
3025
|
+
end
|
3026
|
+
|
3027
|
+
rules.component_tail = function (name)
|
3028
|
+
if (tab_firsts.rule_307[token]) then
|
3029
|
+
recognize(":", "':'")
|
3030
|
+
local component = rules.scoped_name(307)
|
3031
|
+
if component._type ~= TAB_TYPEID.COMPONENT then
|
3032
|
+
semanticError("The previously-defined type is not a COMPONENT")
|
3033
|
+
end
|
3034
|
+
currentScope.component_base = component
|
3035
|
+
rules.supp_inter_spec(308)
|
3036
|
+
recognize("{")
|
3037
|
+
rules.component_body()
|
3038
|
+
recognize("}")
|
3039
|
+
elseif (tab_firsts.rule_308[token]) then
|
3040
|
+
rules.supp_inter_spec(308)
|
3041
|
+
recognize("{")
|
3042
|
+
rules.component_body()
|
3043
|
+
recognize("}")
|
3044
|
+
elseif (tab_firsts.rule_309[token]) then
|
3045
|
+
recognize("{")
|
3046
|
+
rules.component_body()
|
3047
|
+
recognize("}")
|
3048
|
+
elseif (token == ';') then
|
3049
|
+
dclForward(name, TAB_TYPEID.COMPONENT)
|
3050
|
+
--empty
|
3051
|
+
else
|
3052
|
+
sinError("':', 'supports' or '{'")
|
3053
|
+
end
|
3054
|
+
end
|
3055
|
+
|
3056
|
+
rules.supp_inter_spec = function (num_follow_rule)
|
3057
|
+
if tab_firsts.rule_316[token] then
|
3058
|
+
recognize(lex.tab_tokens.TK_SUPPORTS)
|
3059
|
+
currentScope.supports = {}
|
3060
|
+
local interface = rules.scoped_name(num_follow_rule)
|
3061
|
+
if (interface._type ~= TAB_TYPEID.INTERFACE) then
|
3062
|
+
semanticError("The 'SUPPORTS' construction must be reference to an interface")
|
3063
|
+
end
|
3064
|
+
table.insert(currentScope.supports, interface)
|
3065
|
+
rules.supp_name_list(num_follow_rule)
|
3066
|
+
elseif (tab_follow['rule_'..num_follow_rule][token]) then
|
3067
|
+
-- empty
|
3068
|
+
else
|
3069
|
+
sinError("':', ',', or "..tab_follow_rule_error_msg[num_follow_rule])
|
3070
|
+
end
|
3071
|
+
end
|
3072
|
+
|
3073
|
+
rules.supp_name_list = function (num_follow_rule)
|
3074
|
+
if (tab_firsts.rule_321[token]) then
|
3075
|
+
recognize(',')
|
3076
|
+
local interface = rules.scoped_name(num_follow_rule)
|
3077
|
+
if (interface._type ~= TAB_TYPEID.INTERFACE) then
|
3078
|
+
semanticError("The 'SUPPORTS' construction must be reference to an interface")
|
3079
|
+
end
|
3080
|
+
table.insert(currentScope.supports, interface)
|
3081
|
+
rules.supp_name_list(num_follow_rule)
|
3082
|
+
elseif (tab_follow['rule_'..num_follow_rule][token]) then
|
3083
|
+
--empty
|
3084
|
+
else
|
3085
|
+
sinError("',' or '{'")
|
3086
|
+
end
|
3087
|
+
end
|
3088
|
+
|
3089
|
+
rules.component_body = function ()
|
3090
|
+
if (tab_firsts.rule_323[token]) then
|
3091
|
+
rules.component_export()
|
3092
|
+
rules.component_body()
|
3093
|
+
elseif (token == '}') then
|
3094
|
+
--empty
|
3095
|
+
else
|
3096
|
+
sinError("'provides', 'uses', 'emits', 'publishes', 'consumes', 'readonly' 'attribute' or '}'")
|
3097
|
+
end
|
3098
|
+
end
|
3099
|
+
|
3100
|
+
rules.component_export = function ()
|
3101
|
+
if (tab_firsts.rule_325[token]) then
|
3102
|
+
rules.provides_dcl()
|
3103
|
+
recognize(';')
|
3104
|
+
elseif (tab_firsts.rule_326[token]) then
|
3105
|
+
rules.uses_dcl()
|
3106
|
+
recognize(';')
|
3107
|
+
elseif (tab_firsts.rule_327[token]) then
|
3108
|
+
rules.emits_dcl()
|
3109
|
+
recognize(';')
|
3110
|
+
elseif (tab_firsts.rule_328[token]) then
|
3111
|
+
rules.publishes_dcl()
|
3112
|
+
recognize(';')
|
3113
|
+
elseif (tab_firsts.rule_329[token]) then
|
3114
|
+
rules.consumes_dcl()
|
3115
|
+
recognize(';')
|
3116
|
+
elseif (tab_firsts.rule_330[token]) then
|
3117
|
+
rules.attr_dcl()
|
3118
|
+
recognize(';')
|
3119
|
+
end
|
3120
|
+
end
|
3121
|
+
|
3122
|
+
rules.provides_dcl = function ()
|
3123
|
+
recognize(lex.tab_tokens.TK_PROVIDES, 'provides')
|
3124
|
+
local tab_provides = { _type = 'provides' }
|
3125
|
+
tab_provides.interface_type = rules.interface_type()
|
3126
|
+
recognize(lex.tab_tokens.TK_ID, '<identifier>')
|
3127
|
+
local name = getID()
|
3128
|
+
-- new_name(name, name, currentScope.declarations, tab_provides, ERRMSG_DECLARED, name)
|
3129
|
+
end
|
3130
|
+
|
3131
|
+
rules.interface_type = function ()
|
3132
|
+
if (tab_firsts.rule_332[token]) then
|
3133
|
+
local scope = rules.scoped_name(332)
|
3134
|
+
if (scope._type ~= TAB_TYPEID.INTERFACE) then
|
3135
|
+
semanticError("The interface type of this provides declaration shall be either the keyword \
|
3136
|
+
Object or a scoped name that denotes a previously-declared interface type")
|
3137
|
+
end
|
3138
|
+
return scope
|
3139
|
+
elseif (tab_firsts.rule_333[token]) then
|
3140
|
+
recognize(lex.tab_tokens.TK_OBJECT)
|
3141
|
+
return TAB_BASICTYPE.OBJECT
|
3142
|
+
else
|
3143
|
+
sinError("<identifier> or 'Object'")
|
3144
|
+
end
|
3145
|
+
end
|
3146
|
+
|
3147
|
+
rules.uses_dcl = function ()
|
3148
|
+
recognize(lex.tab_tokens.TK_USES)
|
3149
|
+
local tab_uses = { _type = 'uses' }
|
3150
|
+
tab_uses.multiple = rules.multiple_e()
|
3151
|
+
tab_uses.interface_type = rules.interface_type()
|
3152
|
+
recognize(lex.tab_tokens.TK_ID)
|
3153
|
+
local name = getID()
|
3154
|
+
-- new_name(name, name, currentScope.declarations, tab_uses, ERRMSG_DECLARED, name)
|
3155
|
+
end
|
3156
|
+
|
3157
|
+
rules.multiple_e = function ()
|
3158
|
+
if (tab_firsts.rule_339[token]) then
|
3159
|
+
recognize(lex.tab_tokens.TK_MULTIPLE)
|
3160
|
+
return true
|
3161
|
+
elseif (tab_follow.rule_340[token]) then
|
3162
|
+
return nil
|
3163
|
+
--empty
|
3164
|
+
else
|
3165
|
+
sinError("'multiple', <identifier>, ':' or 'Object'")
|
3166
|
+
end
|
3167
|
+
end
|
3168
|
+
|
3169
|
+
rules.emits_dcl = function ()
|
3170
|
+
recognize(lex.tab_tokens.TK_EMITS)
|
3171
|
+
local name = getID()
|
3172
|
+
local tab_uses = { _type = 'emits' }
|
3173
|
+
-- new_name(name, name, currentScope.declarations, tab_emits, ERRMSG_DECLARED, name)
|
3174
|
+
tab_uses.event_type = rules.scoped_name(341)
|
3175
|
+
recognize(lex.tab_tokens.TK_ID)
|
3176
|
+
tab_uses.evtsrc = getID()
|
3177
|
+
end
|
3178
|
+
|
3179
|
+
rules.publishes_dcl = function ()
|
3180
|
+
recognize(lex.tab_tokens.TK_PUBLISHES)
|
3181
|
+
local name = getID()
|
3182
|
+
local tab_publishes = { _type = 'publishes' }
|
3183
|
+
-- new_name(name, name, currentScope.declarations, tab_publishes, ERRMSG_DECLARED, name)
|
3184
|
+
tab_uses.event_type = rules.scoped_name(342)
|
3185
|
+
recognize(lex.tab_tokens.TK_ID)
|
3186
|
+
tab_uses.evtsrc = getID()
|
3187
|
+
end
|
3188
|
+
|
3189
|
+
rules.consumes_dcl = function ()
|
3190
|
+
recognize(lex.tab_tokens.TK_CONSUMES)
|
3191
|
+
local name = getID()
|
3192
|
+
local tab_publishes = { _type = 'consumes' }
|
3193
|
+
-- new_name(name, name, currentScope.declarations, tab_consumes, ERRMSG_DECLARED, name)
|
3194
|
+
tab_uses.event_type = rules.scoped_name(343)
|
3195
|
+
recognize(lex.tab_tokens.TK_ID)
|
3196
|
+
tab_uses.evtsink = getID()
|
3197
|
+
end
|
3198
|
+
|
3199
|
+
|
3200
|
+
---
|
3201
|
+
-- HOME DECLARATION
|
3202
|
+
--------------------------------------------------------------------------
|
3203
|
+
|
3204
|
+
rules.home_dcl = function ()
|
3205
|
+
recognize(lex.tab_tokens.TK_HOME)
|
3206
|
+
recognize(lex.tab_tokens.TK_ID)
|
3207
|
+
local name = getID()
|
3208
|
+
define(name, TAB_TYPEID.HOME)
|
3209
|
+
rules.home_dcl_tail(name)
|
3210
|
+
gotoFatherScope()
|
3211
|
+
end
|
3212
|
+
|
3213
|
+
rules.home_dcl_tail = function (name)
|
3214
|
+
if (tab_firsts.rule_345[token])then
|
3215
|
+
rules.home_inh_spec()
|
3216
|
+
rules.supp_inter_spec(345)
|
3217
|
+
recognize(lex.tab_tokens.TK_MANAGES)
|
3218
|
+
local component = rules.scoped_name(347)
|
3219
|
+
currentScope.manages = component
|
3220
|
+
rules.primary_key_spec_e()
|
3221
|
+
recognize("{")
|
3222
|
+
rules.home_export_l()
|
3223
|
+
recognize("}")
|
3224
|
+
elseif (tab_firsts.rule_346[token]) then
|
3225
|
+
rules.supp_inter_spec(345)
|
3226
|
+
recognize(lex.tab_tokens.TK_MANAGES)
|
3227
|
+
local component = rules.scoped_name(347)
|
3228
|
+
currentScope.manages = component
|
3229
|
+
rules.primary_key_spec_e()
|
3230
|
+
recognize("{")
|
3231
|
+
rules.home_export_l()
|
3232
|
+
recognize("}")
|
3233
|
+
elseif (tab_firsts.rule_347[token]) then
|
3234
|
+
recognize(lex.tab_tokens.TK_MANAGES)
|
3235
|
+
currentScope.component = rules.scoped_name(347)
|
3236
|
+
rules.primary_key_spec_e()
|
3237
|
+
recognize("{")
|
3238
|
+
rules.home_export_l()
|
3239
|
+
recognize("}")
|
3240
|
+
else
|
3241
|
+
sin.error("'supports', 'manages', ':'")
|
3242
|
+
end
|
3243
|
+
end
|
3244
|
+
|
3245
|
+
rules.home_inh_spec = function ()
|
3246
|
+
if (tab_firsts.rule_348[token]) then
|
3247
|
+
recognize(":")
|
3248
|
+
local home = rules.scoped_name(348)
|
3249
|
+
if (home._type ~= TAB_TYPEID.HOME) then
|
3250
|
+
semanticError("The previously-defined type is not a HOME")
|
3251
|
+
end
|
3252
|
+
currentScope.home_base = home
|
3253
|
+
end
|
3254
|
+
end
|
3255
|
+
|
3256
|
+
--(353) <primary_key_spec_e> := TK_PRIMARYKEY <scoped_name>
|
3257
|
+
--(354) | empty
|
3258
|
+
rules.primary_key_spec_e = function ()
|
3259
|
+
if tab_firsts.rule_353[token] then
|
3260
|
+
recognize(lex.tab_tokens.TK_PRIMARYKEY, 'primarykey')
|
3261
|
+
rules.scoped_name(353)
|
3262
|
+
elseif tab_follow.rule_353[token] then
|
3263
|
+
--empty
|
3264
|
+
end
|
3265
|
+
end
|
3266
|
+
|
3267
|
+
rules.home_export_l = function ()
|
3268
|
+
if tab_firsts.rule_359[token] then
|
3269
|
+
rules.home_export()
|
3270
|
+
rules.home_export_l()
|
3271
|
+
elseif tab_follow.rule_359[token] then
|
3272
|
+
--empty
|
3273
|
+
end
|
3274
|
+
end
|
3275
|
+
|
3276
|
+
rules.home_export = function ()
|
3277
|
+
if tab_firsts.rule_361[token] then
|
3278
|
+
rules.export()
|
3279
|
+
elseif tab_firsts.rule_362[token] then
|
3280
|
+
rules.factory_dcl()
|
3281
|
+
recognize(";")
|
3282
|
+
elseif tab_firsts.rule_363[token] then
|
3283
|
+
rules.finder_dcl()
|
3284
|
+
recognize(";")
|
3285
|
+
else
|
3286
|
+
sinError("error")
|
3287
|
+
end
|
3288
|
+
end
|
3289
|
+
|
3290
|
+
rules.factory_dcl = function ()
|
3291
|
+
if tab_firsts.rule_364[token] then
|
3292
|
+
recognize(lex.tab_tokens.TK_FACTORY)
|
3293
|
+
recognize(lex.tab_tokens.TK_ID)
|
3294
|
+
local name = getID()
|
3295
|
+
define(name, TAB_TYPEID.FACTORY)
|
3296
|
+
recognize("(")
|
3297
|
+
rules.init_param_dcls()
|
3298
|
+
recognize(")")
|
3299
|
+
rules.raises_expr_e()
|
3300
|
+
end
|
3301
|
+
end
|
3302
|
+
|
3303
|
+
rules.init_param_dcls = function ()
|
3304
|
+
if tab_firsts.rule_366[token] then
|
3305
|
+
currentScope.members = {}
|
3306
|
+
rules.init_param_dcl()
|
3307
|
+
rules.init_param_dcl_list()
|
3308
|
+
elseif tab_follow.rule_367[token] then
|
3309
|
+
--empty
|
3310
|
+
end
|
3311
|
+
end
|
3312
|
+
|
3313
|
+
rules.init_param_dcl = function ()
|
3314
|
+
if tab_firsts.rule_297[token] then
|
3315
|
+
recognize(lex.tab_tokens.TK_IN)
|
3316
|
+
local tab_type_spec = rules.param_type_spec()
|
3317
|
+
recognize(lex.tab_tokens.TK_ID)
|
3318
|
+
local param_name = getID()
|
3319
|
+
dclName(param_name, currentScope.members,
|
3320
|
+
{
|
3321
|
+
type = tab_type_spec,
|
3322
|
+
name = param_name,
|
3323
|
+
})
|
3324
|
+
else
|
3325
|
+
sinError("'in'")
|
3326
|
+
end
|
3327
|
+
end
|
3328
|
+
|
3329
|
+
rules.init_param_dcl_list = function ()
|
3330
|
+
if tab_firsts.rule_368[token] then
|
3331
|
+
recognize(",")
|
3332
|
+
rules.init_param_dcl()
|
3333
|
+
rules.init_param_dcl_list()
|
3334
|
+
elseif tab_follow.rule_369[token] then
|
3335
|
+
--empty
|
3336
|
+
end
|
3337
|
+
end
|
3338
|
+
|
3339
|
+
rules.finder_dcl = function ()
|
3340
|
+
if tab_firsts.rule_365[token] then
|
3341
|
+
recognize(lex.tab_tokens.TK_FINDER)
|
3342
|
+
recognize(lex.tab_tokens.TK_ID)
|
3343
|
+
local name = getID()
|
3344
|
+
local tab_finder = { _type = TAB_TYPEID.FINDER, name = name }
|
3345
|
+
-- new_name(name, name,
|
3346
|
+
-- currentScope.members, tab_finder, ERRMSG_OPDECLARED, name)
|
3347
|
+
recognize("(")
|
3348
|
+
rules.init_param_dcls(tab_finder)
|
3349
|
+
recognize(")")
|
3350
|
+
rules.raises_expr_e(tab_finder)
|
3351
|
+
else
|
3352
|
+
sinError("'finder'")
|
3353
|
+
end
|
3354
|
+
end
|
3355
|
+
|
3356
|
+
rules.value_or_event = function ()
|
3357
|
+
if (tab_firsts.rule_281[token]) then
|
3358
|
+
recognize(lex.tab_tokens.TK_VALUETYPE)
|
3359
|
+
recognize(lex.tab_tokens.TK_ID)
|
3360
|
+
local name = getID()
|
3361
|
+
rules.value_tail(name, "custom")
|
3362
|
+
elseif (tab_firsts.rule_282[token]) then
|
3363
|
+
recognize(lex.tab_tokens.TK_EVENTTYPE)
|
3364
|
+
recognize(lex.tab_tokens.TK_ID)
|
3365
|
+
local name = getID()
|
3366
|
+
local tab_eventtypescope = rules.eventtype_tail(name, "custom")
|
3367
|
+
if callbacks.eventtype then
|
3368
|
+
callbacks.eventtype(tab_eventtypescope)
|
3369
|
+
end
|
3370
|
+
else
|
3371
|
+
sinError("'valuetype' or 'eventtype'")
|
3372
|
+
end
|
3373
|
+
end
|
3374
|
+
|
3375
|
+
|
3376
|
+
---
|
3377
|
+
-- VALUE DECLARATION
|
3378
|
+
--------------------------------------------------------------------------
|
3379
|
+
|
3380
|
+
rules.value_tail = function (name, modifier)
|
3381
|
+
if (tab_firsts.rule_299[token]) then
|
3382
|
+
define(name, TAB_TYPEID.VALUETYPE)
|
3383
|
+
if modifier then
|
3384
|
+
currentScope[modifier] = true
|
3385
|
+
end
|
3386
|
+
local tab_valuetypescope = rules.value_tail_aux(name)
|
3387
|
+
if callbacks.valuetype then
|
3388
|
+
callbacks.valuetype(tab_valuetypescope)
|
3389
|
+
end
|
3390
|
+
return tab_valuetypescope
|
3391
|
+
elseif (tab_firsts.rule_298[token]) then
|
3392
|
+
define(name, TAB_TYPEID.VALUETYPE)
|
3393
|
+
if modifier then
|
3394
|
+
currentScope[modifier] = true
|
3395
|
+
end
|
3396
|
+
rules.value_inhe_spec()
|
3397
|
+
local tab_valuetypescope = rules.value_tail_aux(name)
|
3398
|
+
if callbacks.valuetype then
|
3399
|
+
callbacks.valuetype(tab_valuetypescope)
|
3400
|
+
end
|
3401
|
+
return tab_valuetypescope
|
3402
|
+
elseif tab_firsts.rule_300[token] then
|
3403
|
+
local _, nameSpace = define(name, TAB_TYPEID.VALUEBOX)
|
3404
|
+
if modifier then
|
3405
|
+
nameSpace[modifier] = true
|
3406
|
+
end
|
3407
|
+
nameSpace.original_type = rules.type_spec()
|
3408
|
+
if callbacks.valuebox then
|
3409
|
+
callbacks.valuebox(nameSpace)
|
3410
|
+
end
|
3411
|
+
return nameSpace
|
3412
|
+
elseif tab_follow.rule_301[token] then
|
3413
|
+
return dclForward(name, TAB_TYPEID.VALUETYPE)
|
3414
|
+
end
|
3415
|
+
end
|
3416
|
+
|
3417
|
+
rules.value_tail_aux = function (name)
|
3418
|
+
recognize("{")
|
3419
|
+
rules.value_element_l()
|
3420
|
+
recognize("}")
|
3421
|
+
local tab_valuetypescope = currentScope
|
3422
|
+
gotoFatherScope()
|
3423
|
+
return tab_valuetypescope
|
3424
|
+
end
|
3425
|
+
|
3426
|
+
rules.value_inhe_spec = function ()
|
3427
|
+
if tab_firsts.rule_268[token] then
|
3428
|
+
recognize(":")
|
3429
|
+
local truncatable = rules.truncatable_e()
|
3430
|
+
local value = rules.scoped_name(268)
|
3431
|
+
if (value._type ~= TAB_TYPEID.VALUETYPE and value._type ~= TAB_TYPEID.INTERFACE) then
|
3432
|
+
semanticError("The previously-defined type is not a VALUETYPE or INTERFACE")
|
3433
|
+
end
|
3434
|
+
currentScope.truncatable = truncatable
|
3435
|
+
if (not value.abstract) then
|
3436
|
+
currentScope.base_value = value
|
3437
|
+
else
|
3438
|
+
currentScope.abstract_base_values = {}
|
3439
|
+
table.insert(currentScope.abstract_base_values, value)
|
3440
|
+
end
|
3441
|
+
rules.value_name_list()
|
3442
|
+
rules.supp_inter_spec(308)
|
3443
|
+
elseif tab_firsts.rule_269[token] then
|
3444
|
+
rules.supp_inter_spec(308)
|
3445
|
+
else
|
3446
|
+
sinError("':', 'supports'")
|
3447
|
+
end
|
3448
|
+
end
|
3449
|
+
|
3450
|
+
rules.value_name_list = function ()
|
3451
|
+
if tab_firsts.rule_277[token] then
|
3452
|
+
recognize(",")
|
3453
|
+
local value = rules.scoped_name(268)
|
3454
|
+
if (not value.abstract) then
|
3455
|
+
if (currentScope.base_value) then
|
3456
|
+
sinError("The single base concrete has been declared.")
|
3457
|
+
else
|
3458
|
+
sinError("The single base concrete must be the first element specified in the inheritance list.")
|
3459
|
+
end
|
3460
|
+
else
|
3461
|
+
currentScope.abstract_base_values = currentScope.abstract_base_values or {}
|
3462
|
+
table.insert(currentScope.abstract_base_values, value)
|
3463
|
+
end
|
3464
|
+
rules.value_name_list()
|
3465
|
+
elseif tab_follow.rule_278[token] then
|
3466
|
+
--empty
|
3467
|
+
end
|
3468
|
+
end
|
3469
|
+
|
3470
|
+
rules.truncatable_e = function ()
|
3471
|
+
if tab_firsts.rule_271[token] then
|
3472
|
+
recognize(lex.tab_tokens.TK_TRUNCATABLE)
|
3473
|
+
return true
|
3474
|
+
elseif tab_follow.rule_272[token] then
|
3475
|
+
--empty
|
3476
|
+
end
|
3477
|
+
end
|
3478
|
+
|
3479
|
+
rules.value_element_l = function ()
|
3480
|
+
if (tab_firsts.rule_285[token]) then
|
3481
|
+
rules.value_element()
|
3482
|
+
rules.value_element_l()
|
3483
|
+
elseif (tab_follow.rule_286[token]) then
|
3484
|
+
--empty
|
3485
|
+
end
|
3486
|
+
end
|
3487
|
+
|
3488
|
+
rules.value_element = function ()
|
3489
|
+
if (tab_firsts.rule_287[token]) then
|
3490
|
+
rules.export()
|
3491
|
+
elseif (tab_firsts.rule_288[token]) then
|
3492
|
+
rules.state_member()
|
3493
|
+
elseif (tab_firsts.rule_289[token]) then
|
3494
|
+
rules.init_dcl()
|
3495
|
+
end
|
3496
|
+
end
|
3497
|
+
|
3498
|
+
rules.state_member = function ()
|
3499
|
+
if (tab_firsts.rule_290[token]) then
|
3500
|
+
recognize(lex.tab_tokens.TK_PUBLIC)
|
3501
|
+
rules.state_member_tail("public")
|
3502
|
+
elseif (tab_firsts.rule_291[token]) then
|
3503
|
+
recognize(lex.tab_tokens.TK_PRIVATE)
|
3504
|
+
rules.state_member_tail("private")
|
3505
|
+
end
|
3506
|
+
end
|
3507
|
+
|
3508
|
+
rules.state_member_tail = function (access)
|
3509
|
+
rules.declarator_l(rules.type_spec(), access)
|
3510
|
+
recognize(";")
|
3511
|
+
end
|
3512
|
+
|
3513
|
+
rules.init_dcl = function ()
|
3514
|
+
if (tab_firsts.rule_292[token]) then
|
3515
|
+
recognize(lex.tab_tokens.TK_FACTORY)
|
3516
|
+
recognize(lex.tab_tokens.TK_ID)
|
3517
|
+
local name = getID()
|
3518
|
+
define(name, TAB_TYPEID.FACTORY)
|
3519
|
+
recognize("(")
|
3520
|
+
rules.init_param_dcls()
|
3521
|
+
recognize(")")
|
3522
|
+
rules.raises_expr_e()
|
3523
|
+
recognize(";")
|
3524
|
+
gotoFatherScope()
|
3525
|
+
end
|
3526
|
+
end
|
3527
|
+
|
3528
|
+
|
3529
|
+
---
|
3530
|
+
-- EVENT DECLARATION
|
3531
|
+
--------------------------------------------------------------------------
|
3532
|
+
|
3533
|
+
rules.eventtype_tail = function (name)
|
3534
|
+
if tab_firsts.rule_302[token] then
|
3535
|
+
define(name, TAB_TYPEID.EVENTTYPE)
|
3536
|
+
rules.value_inhe_spec()
|
3537
|
+
recognize("{")
|
3538
|
+
rules.value_element_l()
|
3539
|
+
recognize("}")
|
3540
|
+
local tab_eventtypescope = currentScope
|
3541
|
+
gotoFatherScope()
|
3542
|
+
return tab_eventtypescope
|
3543
|
+
elseif tab_firsts.rule_303[token] then
|
3544
|
+
define(name, TAB_TYPEID.EVENTTYPE)
|
3545
|
+
recognize("{")
|
3546
|
+
rules.value_element_l()
|
3547
|
+
recognize("}")
|
3548
|
+
local tab_eventtypescope = currentScope
|
3549
|
+
gotoFatherScope()
|
3550
|
+
return tab_eventtypescope
|
3551
|
+
elseif tab_follow.rule_304[token] then
|
3552
|
+
return dclForward(name, TAB_TYPEID.EVENTTYPE)
|
3553
|
+
end
|
3554
|
+
end
|
3555
|
+
|
3556
|
+
--[[function type_prefix_dcl()
|
3557
|
+
if tab_firsts.rule_260[token] then
|
3558
|
+
recognize(lex.tab_tokens.TK_TYPEPREFIX)
|
3559
|
+
rules.scoped_name()
|
3560
|
+
recognize(lex.tab_tokens.TK_STRING_LITERAL)
|
3561
|
+
else
|
3562
|
+
sinError("'typeprefix'")
|
3563
|
+
end
|
3564
|
+
end
|
3565
|
+
]]
|
3566
|
+
|
3567
|
+
|
3568
|
+
---
|
3569
|
+
-- API
|
3570
|
+
--------------------------------------------------------------------------
|
3571
|
+
|
3572
|
+
function parse(stridl, options)
|
3573
|
+
if not options then
|
3574
|
+
options = {}
|
3575
|
+
end
|
3576
|
+
|
3577
|
+
if options.callbacks then
|
3578
|
+
callbacks = options.callbacks
|
3579
|
+
for type, tab in pairs(TAB_BASICTYPE) do
|
3580
|
+
local callback = callbacks[type]
|
3581
|
+
if callback then
|
3582
|
+
if (type == 'TYPECODE') then
|
3583
|
+
else
|
3584
|
+
TAB_BASICTYPE[type] = callback
|
3585
|
+
end
|
3586
|
+
end
|
3587
|
+
end
|
3588
|
+
|
3589
|
+
for type, tab in pairs(TAB_IMPLICITTYPE) do
|
3590
|
+
local callback = callbacks[type]
|
3591
|
+
if callback then
|
3592
|
+
TAB_IMPLICITTYPE[type] = callback
|
3593
|
+
end
|
3594
|
+
end
|
3595
|
+
else
|
3596
|
+
callbacks = {}
|
3597
|
+
end
|
3598
|
+
|
3599
|
+
-- Estrutura que armazena o grafo de sa�da.
|
3600
|
+
-- A tabela � inicializada com o escopo 'GLOBAL'.
|
3601
|
+
output = {absolute_name = ''}
|
3602
|
+
currentScope = output
|
3603
|
+
|
3604
|
+
-- Estrutura que armazena informa��es pertinentes a cada identificador mapeado.
|
3605
|
+
-- Auxilia o processo de gera��o do grafo de sa�da.
|
3606
|
+
-- A tabela � indexada por *absolute name*.
|
3607
|
+
namespaces = {[''] = {namespace = output}}
|
3608
|
+
forwardDeclarations = {}
|
3609
|
+
idl = stridl
|
3610
|
+
CORBAVisible = nil
|
3611
|
+
currentScopeName = ''
|
3612
|
+
tab_identifiers = {}
|
3613
|
+
scopeRoots = {}
|
3614
|
+
table.insert(scopeRoots, {root = '', scope = ''})
|
3615
|
+
lex.init()
|
3616
|
+
token = getToken()
|
3617
|
+
--Implicit definitions
|
3618
|
+
-- CORBA::TypeCode
|
3619
|
+
if not options.notypecode then
|
3620
|
+
define('CORBA', TAB_TYPEID.MODULE)
|
3621
|
+
define('TypeCode', TAB_TYPEID.TYPECODE, TAB_IMPLICITTYPE.TYPECODE)
|
3622
|
+
gotoFatherScope()
|
3623
|
+
end
|
3624
|
+
-- Starts parsing with the first grammar rule.
|
3625
|
+
rules.specification()
|
3626
|
+
-- Removing CORBA::TypeCode implicit definition.
|
3627
|
+
if (not options.notypecode) and (not CORBAVisible) then
|
3628
|
+
table.remove(output, 1)
|
3629
|
+
end
|
3630
|
+
return output
|
3631
|
+
end
|