快速业务通道

一个简单的语言的语法(三):做些小调整,并将生成目标换到CSharp2 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
es 174. 175.LPAREN : ''('' 176. ; 177. 178.RPAREN : '')'' 179. ; 180. 181.LBRACK : ''['' 182. ; 183. 184.RBRACK : '']'' 185. ; 186. 187.LBRACE : ''{'' 188. ; 189. 190.RBRACE : ''}'' 191. ; 192. 193.COMMA : '','' 194. ; 195. 196.SEMICOLON 197. : '';'' 198. ; 199. 200.PLUS : ''+'' 201. ; 202. 203.MINUS : ''-'' 204. ; 205. 206.MUL : ''*'' 207. ; 208. 209.DIV : ''/'' 210. ; 211. 212.EQEQ : ''=='' 213. ; 214. 215.NE : ''!='' 216. ; 217. 218.LT : ''<'' 219. ; 220. 221.LE : ''<='' 222. ; 223. 224.GT : ''>'' 225. ; 226. 227.GE : ''>='' 228. ; 229. 230.BANG : ''!'' 231. ; 232. 233.ANDAND : ''&&'' 234. ; 235. 236.OROR : ''||'' 237. ; 238. 239.EQ : ''='' 240. ; 241. 242.IF : ''if'' 243. ; 244. 245.ELSE : ''else'' 246. ; 247. 248.WHILE : ''while'' 249. ; 250. 251.BREAK : ''break'' 252. ; 253. 254.READ : ''read'' 255. ; 256. 257.WRITE : ''write'' 258. ; 259. 260.INT : ''int'' 261. ; 262. 263.REAL : ''real'' 264. ; 265. 266.Identifier 267. : LetterOrUnderscore ( LetterOrUnderscore | Digit )* 268. ; 269. 270.Integer : Digit+ 271. ; 272. 273.RealNumber 274. : Digit+ ''.'' Digit+ 275. ; 276. 277.fragment 278.Digit : ''0''..''9'' 279. ; 280. 281.fragment 282.LetterOrUnderscore 283. : Letter | ''_'' 284. ; 285. 286.fragment 287.Letter : ( ''a''..''z'' | ''A''..''Z'' ) 288. ; 289. 290.WS : ( '' '' | ''\t'' | ''\r'' | ''\n'' )+ { $channel = HIDDEN; } 291. ; 292. 293.Comment 294. : ''/*'' ( options { greedy = false; } : . )* ''*/'' { $channel = HIDDEN; } 295. ; 296. 297.LineComment 298. : ''//'' ~ (''\n''|''\r'')* ''\r''? ''\n'' { $channel = HIDDEN; } 299. ;

一个简单的语言的语法(三):做些小调整,并将生成目标换到CSharp2(4)

时间:2011-10-07 javaeye RednaxelaFX

同上一篇一样,也写一个启动lexer和parser的程序。这次是用C#来写:

C#代码

using System;
using System.IO;
using Antlr.Runtime;      // Antlr3.Runtime.dll
using Antlr.Runtime.Tree;
using Antlr.Utility.Tree; // Antlr3.Utility.dll

sealed class TestJerryAst {
    static void PrintUsage( ) {
        Console.WriteLine( "Usage: TestJerryAst [-dot] <source file>" );
    }

    static void Main( string[] args ) {
        bool generateDot = false;
        string srcFile;
        switch ( args.Length ) {
        case 0:
            PrintUsage( );
            return;
        case 1:
            if ( !File.Exists( args[ 0 ] ) ) goto case 0;
            srcFile = args[ 0 ];
            break;
        default:
            if ( "-dot" == args[ 0 ] ) {
                generateDot = true;
                if ( !File.Exists( args[ 1 ] ) ) goto case 0;
                srcFile = args[ 1 ];
            } else {
                goto case 1;
            }
            break;
        }
        
        var input = new ANTLRReaderStream( File.OpenText( srcFile ) );
        var lexer = new JerryLexer( input );
        var tokens = new CommonTokenStream( lexer );
        var parser = new JerryParser( tokens );

        var programReturn = parser.program();
        var ast = ( CommonTre

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号