⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t.g

📁 antlr最新版本V3源代码
💻 G
字号:
grammar T;options {    language=Python;}program : method ;method/* name is visible to any rule called by method directly or indirectly. *  There is also a stack of these names, one slot for each nested *  invocation of method.  If you have a method nested within another *  method then you have name strings on the stack.  Referencing *  $method.name access the topmost always.  I have no way at the moment *  to access earlier elements on the stack. */scope {name}    :   'method' ID '(' ')' {$method::name=$ID.text;} body    ; body:   '{' stat* '}'    ;stat:   ID '=' expr ';'    |   method // allow nested methods to demo stack nature of dynamic attributes    ;expr:   mul ('+' mul)*     ;mul :   atom ('*' atom)*    ;/** Demonstrate that 'name' is a dynamically-scoped attribute defined *  within rule method.  With lexical-scoping (variables go away at *  the end of the '}'), you'd have to pass the current method name *  down through all rules as a parameter.  Ick.  This is much much better. */atom:   ID  {print "ref "+$ID.text+" from method "+$method::name}    |   INT {print "int "+$INT.text+" in method "+$method::name}    ;ID  :   ('a'..'z'|'A'..'Z')+ ;INT :   '0'..'9'+ ;WS  :   (' '|'\t'|'\n')+ {$channel=HIDDEN}    ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -