2017-08-14 40 views
0

我尝试在javascript上使用antlr4,然后阅读https://tomassetti.me/antlr-and-the-web/并发生错误。未捕获的错误:模块名称“antlr4/index”尚未加载到require.js的上下文中

的index.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
    <script type="text/javascript" src="lib/require.js"></script> 
    <script type="text/javascript"> 
     var antlr4 = require('antlr4/index'); 
     var QueryLexer = require('gram/queryLexer'); 
     var QueryParser = require('gram/queryParser'); 
     document.getElementById("parse").addEventListener("click", function() { 
      var input = document.getElementById("code").value; 
      var chars = new antlr4.InputStream(input); 
      var lexer = new QueryLexer.queryLexer(chars); 
      var tokens = new antlr4.CommonTokenStream(lexer); 
      var parser = new QueryParser.queryParser(tokens); 
      parser.buildParseTrees = true; 
      var tree = parser.query(); 
      console.log("Parsed: "+ tree); 
     }); 
    </script> 
</head> 
<body> 
<div id="inputs"> 
<textarea id="code"> 
* play with antlr4 
* write a tutorial 
</textarea> 
    <br/> 
    <button id="parse">Parse</button> 
</div> 
</body> 
</html> 

该错误可能会导致 “变种antlr4 =要求( 'antlr4 /索引');”。 我从http://www.antlr.org/download/index.html下载了antlr4,并放入了相同层次的“index.html”。在lib目录中存在“require.js”。

index.js

exports.atn = require('./atn/index'); 
exports.codepointat = require('./polyfills/codepointat'); 
exports.dfa = require('./dfa/index'); 
exports.fromcodepoint = require('./polyfills/fromcodepoint'); 
exports.tree = require('./tree/index'); 
exports.error = require('./error/index'); 
exports.Token = require('./Token').Token; 
exports.CharStreams = require('./CharStreams').CharStreams; 
exports.CommonToken = require('./Token').CommonToken; 
exports.InputStream = require('./InputStream').InputStream; 
exports.FileStream = require('./FileStream').FileStream; 
exports.CommonTokenStream = require('./CommonTokenStream').CommonTokenStream; 
exports.Lexer = require('./Lexer').Lexer; 
exports.Parser = require('./Parser').Parser; 
var pc = require('./PredictionContext'); 
exports.PredictionContextCache = pc.PredictionContextCache; 
exports.ParserRuleContext = require('./ParserRuleContext').ParserRuleContext; 
exports.Interval = require('./IntervalSet').Interval; 
exports.Utils = require('./Utils'); 

我觉得没有问题,因为需要路径( 'antlr4 /指数')是没有错的。 但发生错误。请给我一些想法。

回答

0

您在问题中显示的代码不能按RequirejS原样工作。您必须以不同的方式编写require来电,或者将您在define中拨打的所有require来电归为一类,以便使用RequireJS提供的CommonJS support

但是本教程不要求您使用RequireJS。如果你去github repo该教程的作者提供的,你会看到:

Require.js was obtained from https://github.com/letorbi/smoothie/blob/master/standalone/require.js

你必须使用这个文件,这是不RequireJS,但类似的东西,它在某种意义上说,它也装载脚本,但与RequireJS不同,它似乎支持CommonJS模块格式,而RequireJS则不支持。

+0

谢谢:)我重写require.js像https://github.com/letorbi/smoothie/blob/master/standalone/require.js,然后它做得很好。 – tbt

相关问题