Sun Nov 24 23:10:36 2024
EVENTS
 FREE
SOFTWARE
INSTITUTE

POLITICS
JOBS
MEMBERS'
CORNER

MAILING
LIST

NYLXS Mailing Lists and Archives
NYLXS Members have a lot to say and share but we don't keep many secrets. Join the Hangout Mailing List and say your peice.

DATE 2016-04-01

HANGOUT

2024-11-24 | 2024-10-24 | 2024-09-24 | 2024-08-24 | 2024-07-24 | 2024-06-24 | 2024-05-24 | 2024-04-24 | 2024-03-24 | 2024-02-24 | 2024-01-24 | 2023-12-24 | 2023-11-24 | 2023-10-24 | 2023-09-24 | 2023-08-24 | 2023-07-24 | 2023-06-24 | 2023-05-24 | 2023-04-24 | 2023-03-24 | 2023-02-24 | 2023-01-24 | 2022-12-24 | 2022-11-24 | 2022-10-24 | 2022-09-24 | 2022-08-24 | 2022-07-24 | 2022-06-24 | 2022-05-24 | 2022-04-24 | 2022-03-24 | 2022-02-24 | 2022-01-24 | 2021-12-24 | 2021-11-24 | 2021-10-24 | 2021-09-24 | 2021-08-24 | 2021-07-24 | 2021-06-24 | 2021-05-24 | 2021-04-24 | 2021-03-24 | 2021-02-24 | 2021-01-24 | 2020-12-24 | 2020-11-24 | 2020-10-24 | 2020-09-24 | 2020-08-24 | 2020-07-24 | 2020-06-24 | 2020-05-24 | 2020-04-24 | 2020-03-24 | 2020-02-24 | 2020-01-24 | 2019-12-24 | 2019-11-24 | 2019-10-24 | 2019-09-24 | 2019-08-24 | 2019-07-24 | 2019-06-24 | 2019-05-24 | 2019-04-24 | 2019-03-24 | 2019-02-24 | 2019-01-24 | 2018-12-24 | 2018-11-24 | 2018-10-24 | 2018-09-24 | 2018-08-24 | 2018-07-24 | 2018-06-24 | 2018-05-24 | 2018-04-24 | 2018-03-24 | 2018-02-24 | 2018-01-24 | 2017-12-24 | 2017-11-24 | 2017-10-24 | 2017-09-24 | 2017-08-24 | 2017-07-24 | 2017-06-24 | 2017-05-24 | 2017-04-24 | 2017-03-24 | 2017-02-24 | 2017-01-24 | 2016-12-24 | 2016-11-24 | 2016-10-24 | 2016-09-24 | 2016-08-24 | 2016-07-24 | 2016-06-24 | 2016-05-24 | 2016-04-24 | 2016-03-24 | 2016-02-24 | 2016-01-24 | 2015-12-24 | 2015-11-24 | 2015-10-24 | 2015-09-24 | 2015-08-24 | 2015-07-24 | 2015-06-24 | 2015-05-24 | 2015-04-24 | 2015-03-24 | 2015-02-24 | 2015-01-24 | 2014-12-24 | 2014-11-24 | 2014-10-24 | 2014-09-24 | 2014-08-24 | 2014-07-24 | 2014-06-24 | 2014-05-24 | 2014-04-24 | 2014-03-24 | 2014-02-24 | 2014-01-24 | 2013-12-24 | 2013-11-24 | 2013-10-24 | 2013-09-24 | 2013-08-24 | 2013-07-24 | 2013-06-24 | 2013-05-24 | 2013-04-24 | 2013-03-24 | 2013-02-24 | 2013-01-24 | 2012-12-24 | 2012-11-24 | 2012-10-24 | 2012-09-24 | 2012-08-24 | 2012-07-24 | 2012-06-24 | 2012-05-24 | 2012-04-24 | 2012-03-24 | 2012-02-24 | 2012-01-24 | 2011-12-24 | 2011-11-24 | 2011-10-24 | 2011-09-24 | 2011-08-24 | 2011-07-24 | 2011-06-24 | 2011-05-24 | 2011-04-24 | 2011-03-24 | 2011-02-24 | 2011-01-24 | 2010-12-24 | 2010-11-24 | 2010-10-24 | 2010-09-24 | 2010-08-24 | 2010-07-24 | 2010-06-24 | 2010-05-24 | 2010-04-24 | 2010-03-24 | 2010-02-24 | 2010-01-24 | 2009-12-24 | 2009-11-24 | 2009-10-24 | 2009-09-24 | 2009-08-24 | 2009-07-24 | 2009-06-24 | 2009-05-24 | 2009-04-24 | 2009-03-24 | 2009-02-24 | 2009-01-24 | 2008-12-24 | 2008-11-24 | 2008-10-24 | 2008-09-24 | 2008-08-24 | 2008-07-24 | 2008-06-24 | 2008-05-24 | 2008-04-24 | 2008-03-24 | 2008-02-24 | 2008-01-24 | 2007-12-24 | 2007-11-24 | 2007-10-24 | 2007-09-24 | 2007-08-24 | 2007-07-24 | 2007-06-24 | 2007-05-24 | 2007-04-24 | 2007-03-24 | 2007-02-24 | 2007-01-24 | 2006-12-24 | 2006-11-24 | 2006-10-24 | 2006-09-24 | 2006-08-24 | 2006-07-24 | 2006-06-24 | 2006-05-24 | 2006-04-24 | 2006-03-24 | 2006-02-24 | 2006-01-24 | 2005-12-24 | 2005-11-24 | 2005-10-24 | 2005-09-24 | 2005-08-24 | 2005-07-24 | 2005-06-24 | 2005-05-24 | 2005-04-24 | 2005-03-24 | 2005-02-24 | 2005-01-24 | 2004-12-24 | 2004-11-24 | 2004-10-24 | 2004-09-24 | 2004-08-24 | 2004-07-24 | 2004-06-24 | 2004-05-24 | 2004-04-24 | 2004-03-24 | 2004-02-24 | 2004-01-24 | 2003-12-24 | 2003-11-24 | 2003-10-24 | 2003-09-24 | 2003-08-24 | 2003-07-24 | 2003-06-24 | 2003-05-24 | 2003-04-24 | 2003-03-24 | 2003-02-24 | 2003-01-24 | 2002-12-24 | 2002-11-24 | 2002-10-24 | 2002-09-24 | 2002-08-24 | 2002-07-24 | 2002-06-24 | 2002-05-24 | 2002-04-24 | 2002-03-24 | 2002-02-24 | 2002-01-24 | 2001-12-24 | 2001-11-24 | 2001-10-24 | 2001-09-24 | 2001-08-24 | 2001-07-24 | 2001-06-24 | 2001-05-24 | 2001-04-24 | 2001-03-24 | 2001-02-24 | 2001-01-24 | 2000-12-24 | 2000-11-24 | 2000-10-24 | 2000-09-24 | 2000-08-24 | 2000-07-24 | 2000-06-24 | 2000-05-24 | 2000-04-24 | 2000-03-24 | 2000-02-24 | 2000-01-24 | 1999-12-24

Key: Value:

Key: Value:

MESSAGE
DATE 2016-04-09
FROM Christopher League
SUBJECT Re: [Hangout-NYLXS] Antlr visitor Programming - kicking it around
From hangout-bounces-at-nylxs.com Sat Apr 9 11:07:38 2016
Return-Path:
X-Original-To: archive-at-mrbrklyn.com
Delivered-To: archive-at-mrbrklyn.com
Received: from www.mrbrklyn.com (www.mrbrklyn.com [96.57.23.82])
by mrbrklyn.com (Postfix) with ESMTP id 2D557161224;
Sat, 9 Apr 2016 11:07:36 -0400 (EDT)
X-Original-To: hangout-at-www.mrbrklyn.com
Delivered-To: hangout-at-www.mrbrklyn.com
Received: by mrbrklyn.com (Postfix, from userid 1000)
id 288EE161914; Sat, 9 Apr 2016 11:07:26 -0400 (EDT)
Resent-From: Ruben Safir
Resent-Date: Sat, 9 Apr 2016 11:07:25 -0400
Resent-Message-ID: <20160409150725.GA3493-at-www.mrbrklyn.com>
Resent-To: hangout-at-mrbrklyn.com
X-Original-To: ruben-at-mrbrklyn.com
Delivered-To: ruben-at-mrbrklyn.com
Received: from B-EXH-EDGE1.liunet.edu (b-edge1.smtp.liu.edu [148.4.248.206])
by mrbrklyn.com (Postfix) with ESMTP id 15155161914
for ; Sat, 9 Apr 2016 09:19:16 -0400 (EDT)
Received: from B-EXH-3.liunet.edu (148.4.250.212) by B-EXH-EDGE1.liunet.edu
(148.4.248.206) with Microsoft SMTP Server (TLS) id 14.3.210.2; Sat, 9 Apr
2016 09:19:01 -0400
Received: from localhost (96.250.202.133) by B-EXH-3.liunet.edu
(148.4.250.212) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Sat, 9 Apr
2016 09:19:14 -0400
From: Christopher League
To: Ruben Safir , Hangout
In-Reply-To: <5708706F.5040305-at-mrbrklyn.com>
References: <5708706F.5040305-at-mrbrklyn.com>
User-Agent: Notmuch/0.21 (http://notmuchmail.org) Emacs/24.5.1
(x86_64-unknown-linux-gnu)
Date: Sat, 9 Apr 2016 09:19:13 -0400
Message-ID: <87lh4m7wdq.fsf-at-lydrik.home.lan>
MIME-Version: 1.0
X-Originating-IP: [96.250.202.133]
X-ClientProxiedBy: U-EXH-CAS.liunet.edu (148.4.184.26) To B-EXH-3.liunet.edu
(148.4.250.212)
X-UID: 18748
X-Content-Filtered-By: Mailman/MimeDel 2.1.17
Subject: Re: [Hangout-NYLXS] Antlr visitor Programming - kicking it around
X-BeenThere: hangout-at-nylxs.com
X-Mailman-Version: 2.1.17
Precedence: list
Reply-To: NYLXS Discussions List
List-Id: NYLXS Discussions List
List-Unsubscribe: ,

List-Archive:
List-Post:
List-Help:
List-Subscribe: ,

Content-Type: multipart/mixed; boundary="===============0359403622=="
Errors-To: hangout-bounces-at-nylxs.com
Sender: "hangout"

--===============0359403622==
Content-Type: multipart/alternative; boundary="=-=-="

--=-=-=
Content-Type: text/plain


> So I'm only visiting visitAssignID and visitQuantity and
> visitVariables?

Not even visitQuantity, I think. The purpose of `CollectVarsVisitor` was
to "traverse a parse tree for the calculator language and just keep
track of the set of identifiers that are being referenced (assigned or
retrieved) in the program."

If we look at the grammar:

stmt : ID '=' expr #assignID
| 'print' expr #print
;

expr : '-' expr #negative
| expr ('*' | '/') expr #products_quotents
| expr ('+'|'-') expr #sums
| '(' expr ')' #parans
|NUM #quantity
|ID #variables
;

The only place that a variable is assigned is in `#assignID` and the
only place a variable is retrieved is in `#variables`. So those are the
only two visit methods we'd need to fulfill the purpose of
`CollectVarsVisitor`.

The `AssignIDContext` and `VariablesContext` will each have a `ctx.ID()`
because ID appears in both of those rules. And because it appears
exactly once in each, the method returns just a single `TerminalNode`,
rather than a list of them. The other contexts (tree nodes) don't have
any ID, so there is no `ctx.ID()` method in those.

CL


Ruben Safir writes:

> So kicking this around, forget that this HW is now a month old...
>
> I did this which fails, and I know why...I think
>
>
> Note that it fails on contex objects that have no ID()
>
>
> import org.antlr.v4.runtime.ANTLRInputStream;
> import org.antlr.v4.runtime.CommonTokenStream;
> import org.antlr.v4.runtime.tree.ParseTree;
> import org.antlr.v4.runtime.tree.TerminalNode;
> import org.antlr.v4.runtime.*;
> import org.antlr.v4.runtime.tree.*;
> import java.util.HashSet;
>
> public class CollectVarsVisitor extends CalcBaseVisitor {
> HashSet vars = new HashSet();
>
> //STMT
> -at-Override
> public Void visitAssignID(CalcParser.AssignIDContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println(id.getText());
> vars.add(id.getText());
> }
> return super.visitAssignID(ctx);
> }
>
> -at-Override
> public Void visitPrint(CalcParser.PrintContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println(id.getText());
> vars.add(id.getText());
> }
> return super.visitPrint(ctx);
> }
>
> //EXPR
>
> -at-Override
> public Void visitNegative(CalcParser.NegativeContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitNegative(ctx);
> }
>
>
> -at-Override
> public Void visitProducts_quotents(CalcParser.Products_quotentsContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitProducts_quotents(ctx);
> }
>
> -at-Override
> public Void visitSums(CalcParser.SumsContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitSums(ctx);
> }
>
> -at-Override
> public Void visitParans(CalcParser.ParansContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitParans(ctx);
> }
>
> -at-Override
> public Void visitQuantity(CalcParser.QuantityContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitQuantity(ctx);
> }
>
> -at-Override
> public Void visitVariables(CalcParser.VariablesContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitVariables(ctx);
> }
> }
>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> [ruben-at-manjaro calculator]$ javac Main.java
> ./CollectVarsVisitor.java:25: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type PrintContext
> ./CollectVarsVisitor.java:37: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type NegativeContext
> ./CollectVarsVisitor.java:48: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type Products_quotentsContext
> ./CollectVarsVisitor.java:58: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type SumsContext
> ./CollectVarsVisitor.java:68: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type ParansContext
> ./CollectVarsVisitor.java:78: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type QuantityContext
> Note: Some input files use or override a deprecated API.
> Note: Recompile with -Xlint:deprecation for details.
> 6 errors
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> cat Calc.g4
> grammar Calc;
>
> prog : (stmt ';')*
> ;
>
> stmt : ID '=' expr #assignID
> | 'print' expr #print
> ;
>
> expr : '-' expr #negative
> | expr ('*' | '/') expr #products_quotents
> | expr ('+'|'-') expr #sums
> | '(' expr ')' #parans
> |NUM #quantity
> |ID #variables
> ;
>
> NUM : [0-9]+ ('.' [0-9]+)?
> ;
> ID :[a-zA-Z]+
> ;
> WS :(' '|'\n'|'\t'|'\r')+ ->skip
> ;
>
> So I'm only visiting visitAssignID and visitQuantity and visitVariables?
>
> Ruben
>
> --
> So many immigrant groups have swept through our town
> that Brooklyn, like Atlantis, reaches mythological
> proportions in the mind of the world - RI Safir 1998
> http://www.mrbrklyn.com
>
> DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
> http://www.nylxs.com - Leadership Development in Free Software
> http://www2.mrbrklyn.com/resources - Unpublished Archive
> http://www.coinhangout.com - coins!
> http://www.brooklyn-living.com
>
> Being so tracked is for FARM ANIMALS and and extermination camps,
> but incompatible with living as a free human being. -RI Safir 2013

--=-=-=
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"


So I'm only visiting visitAssignID and visitQuantity and
visitVariables?

Not even visitQuantity, I think. The purpose of CollectVarsVisitor was
to "traverse a parse tree for the calculator language and just keep
track of the set of identifiers that are being referenced (assigned or
retrieved) in the program."

If we look at the grammar:
stmt : ID '=' expr #assignID
| 'print' expr #print
;

expr : '-' expr #negative
| expr ('*' | '/') expr #products_quotents
| expr ('+'|'-') expr #sums
| '(' expr ')' #parans
|NUM #quantity
|ID #variables
;

The only place that a variable is assigned is in #assignID and the only
place a variable is retrieved is in #variables. So those are the only
two visit methods we'd need to fulfill the purpose of
CollectVarsVisitor.

The AssignIDContext and VariablesContext will each have a ctx.ID()
because ID appears in both of those rules. And because it appears
exactly once in each, the method returns just a single TerminalNode,
rather than a list of them. The other contexts (tree nodes) don't have
any ID, so there is no ctx.ID() method in those.

CL

Ruben Safir [1]ruben-at-mrbrklyn.com writes:

So kicking this around, forget that this HW is now a month old...

I did this which fails, and I know why...I think

Note that it fails on contex objects that have no ID()

import org.antlr.v4.runtime.ANTLRInputStream; import
org.antlr.v4.runtime.CommonTokenStream; import
org.antlr.v4.runtime.tree.ParseTree; import
org.antlr.v4.runtime.tree.TerminalNode; import
org.antlr.v4.runtime.; import org.antlr.v4.runtime.tree.; import
java.util.HashSet;

public class CollectVarsVisitor extends CalcBaseVisitor { HashSet
vars = new HashSet();

//STMT
-at-Override public Void visitAssignID(CalcParser.AssignIDContext ctx)
{ TerminalNode id = ctx.ID(); if(id != null) {
System.out.println(id.getText()); vars.add(id.getText()); } return
super.visitAssignID(ctx); }
-at-Override
public Void visitPrint(CalcParser.PrintContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println(id.getText());
vars.add(id.getText());
}
return super.visitPrint(ctx);
}

//EXPR
-at-Override
public Void visitNegative(CalcParser.NegativeContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitNegative(ctx);
}


-at-Override
public Void visitProducts_quotents(CalcParser.Products_quotentsContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitProducts_quotents(ctx);
}

-at-Override
public Void visitSums(CalcParser.SumsContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitSums(ctx);
}

-at-Override
public Void visitParans(CalcParser.ParansContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitParans(ctx);
}

-at-Override
public Void visitQuantity(CalcParser.QuantityContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitQuantity(ctx);
}

-at-Override
public Void visitVariables(CalcParser.VariablesContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitVariables(ctx);
}

}

[ruben-at-manjaro calculator]$ javac Main.java
./CollectVarsVisitor.java:25: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type PrintContext
./CollectVarsVisitor.java:37: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type NegativeContext
./CollectVarsVisitor.java:48: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type Products_quotentsContext
./CollectVarsVisitor.java:58: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type SumsContext
./CollectVarsVisitor.java:68: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type ParansContext
./CollectVarsVisitor.java:78: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type QuantityContext
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
6 errors

cat Calc.g4 grammar Calc;

prog : (stmt `;')* ;

stmt : ID `=' expr #assignID | `print' expr #print ;

expr : `-' expr #negative | expr ('*`|'/`) expr #products_quotents |
expr ('+`|'-`) expr #sums |'(`expr')' #parans |NUM #quantity |ID
#variables ;

NUM : [0-9]+ ('.`[0-9]+)?
; ID :[a-zA-Z]+
; WS :(' `|'`|'`|'')+ ->skip ;

So I'm only visiting visitAssignID and visitQuantity and
visitVariables?

Ruben

- So many immigrant groups have swept through our town that
Brooklyn, like Atlantis, reaches mythological proportions in the
mind of the world - RI Safir 1998 http://www.mrbrklyn.com

DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
http://www.nylxs.com - Leadership Development in Free Software
http://www2.mrbrklyn.com/resources - Unpublished Archive
http://www.coinhangout.com - coins! http://www.brooklyn-living.com

Being so tracked is for FARM ANIMALS and and extermination camps,
but incompatible with living as a free human being. -RI Safir 2013

References

1. mailto:ruben-at-mrbrklyn.com

--=-=-=--

--===============0359403622==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
hangout mailing list
hangout-at-nylxs.com
http://www.nylxs.com/
--===============0359403622==--

--===============0359403622==
Content-Type: multipart/alternative; boundary="=-=-="

--=-=-=
Content-Type: text/plain


> So I'm only visiting visitAssignID and visitQuantity and
> visitVariables?

Not even visitQuantity, I think. The purpose of `CollectVarsVisitor` was
to "traverse a parse tree for the calculator language and just keep
track of the set of identifiers that are being referenced (assigned or
retrieved) in the program."

If we look at the grammar:

stmt : ID '=' expr #assignID
| 'print' expr #print
;

expr : '-' expr #negative
| expr ('*' | '/') expr #products_quotents
| expr ('+'|'-') expr #sums
| '(' expr ')' #parans
|NUM #quantity
|ID #variables
;

The only place that a variable is assigned is in `#assignID` and the
only place a variable is retrieved is in `#variables`. So those are the
only two visit methods we'd need to fulfill the purpose of
`CollectVarsVisitor`.

The `AssignIDContext` and `VariablesContext` will each have a `ctx.ID()`
because ID appears in both of those rules. And because it appears
exactly once in each, the method returns just a single `TerminalNode`,
rather than a list of them. The other contexts (tree nodes) don't have
any ID, so there is no `ctx.ID()` method in those.

CL


Ruben Safir writes:

> So kicking this around, forget that this HW is now a month old...
>
> I did this which fails, and I know why...I think
>
>
> Note that it fails on contex objects that have no ID()
>
>
> import org.antlr.v4.runtime.ANTLRInputStream;
> import org.antlr.v4.runtime.CommonTokenStream;
> import org.antlr.v4.runtime.tree.ParseTree;
> import org.antlr.v4.runtime.tree.TerminalNode;
> import org.antlr.v4.runtime.*;
> import org.antlr.v4.runtime.tree.*;
> import java.util.HashSet;
>
> public class CollectVarsVisitor extends CalcBaseVisitor {
> HashSet vars = new HashSet();
>
> //STMT
> -at-Override
> public Void visitAssignID(CalcParser.AssignIDContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println(id.getText());
> vars.add(id.getText());
> }
> return super.visitAssignID(ctx);
> }
>
> -at-Override
> public Void visitPrint(CalcParser.PrintContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println(id.getText());
> vars.add(id.getText());
> }
> return super.visitPrint(ctx);
> }
>
> //EXPR
>
> -at-Override
> public Void visitNegative(CalcParser.NegativeContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitNegative(ctx);
> }
>
>
> -at-Override
> public Void visitProducts_quotents(CalcParser.Products_quotentsContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitProducts_quotents(ctx);
> }
>
> -at-Override
> public Void visitSums(CalcParser.SumsContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitSums(ctx);
> }
>
> -at-Override
> public Void visitParans(CalcParser.ParansContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitParans(ctx);
> }
>
> -at-Override
> public Void visitQuantity(CalcParser.QuantityContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitQuantity(ctx);
> }
>
> -at-Override
> public Void visitVariables(CalcParser.VariablesContext ctx) {
> TerminalNode id = ctx.ID();
> if(id != null) {
> System.out.println("expresion: " + id.getText());
> vars.add(id.getText());
> }
> return super.visitVariables(ctx);
> }
> }
>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> [ruben-at-manjaro calculator]$ javac Main.java
> ./CollectVarsVisitor.java:25: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type PrintContext
> ./CollectVarsVisitor.java:37: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type NegativeContext
> ./CollectVarsVisitor.java:48: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type Products_quotentsContext
> ./CollectVarsVisitor.java:58: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type SumsContext
> ./CollectVarsVisitor.java:68: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type ParansContext
> ./CollectVarsVisitor.java:78: error: cannot find symbol
> TerminalNode id = ctx.ID();
> ^
> symbol: method ID()
> location: variable ctx of type QuantityContext
> Note: Some input files use or override a deprecated API.
> Note: Recompile with -Xlint:deprecation for details.
> 6 errors
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> cat Calc.g4
> grammar Calc;
>
> prog : (stmt ';')*
> ;
>
> stmt : ID '=' expr #assignID
> | 'print' expr #print
> ;
>
> expr : '-' expr #negative
> | expr ('*' | '/') expr #products_quotents
> | expr ('+'|'-') expr #sums
> | '(' expr ')' #parans
> |NUM #quantity
> |ID #variables
> ;
>
> NUM : [0-9]+ ('.' [0-9]+)?
> ;
> ID :[a-zA-Z]+
> ;
> WS :(' '|'\n'|'\t'|'\r')+ ->skip
> ;
>
> So I'm only visiting visitAssignID and visitQuantity and visitVariables?
>
> Ruben
>
> --
> So many immigrant groups have swept through our town
> that Brooklyn, like Atlantis, reaches mythological
> proportions in the mind of the world - RI Safir 1998
> http://www.mrbrklyn.com
>
> DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
> http://www.nylxs.com - Leadership Development in Free Software
> http://www2.mrbrklyn.com/resources - Unpublished Archive
> http://www.coinhangout.com - coins!
> http://www.brooklyn-living.com
>
> Being so tracked is for FARM ANIMALS and and extermination camps,
> but incompatible with living as a free human being. -RI Safir 2013

--=-=-=
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"


So I'm only visiting visitAssignID and visitQuantity and
visitVariables?

Not even visitQuantity, I think. The purpose of CollectVarsVisitor was
to "traverse a parse tree for the calculator language and just keep
track of the set of identifiers that are being referenced (assigned or
retrieved) in the program."

If we look at the grammar:
stmt : ID '=' expr #assignID
| 'print' expr #print
;

expr : '-' expr #negative
| expr ('*' | '/') expr #products_quotents
| expr ('+'|'-') expr #sums
| '(' expr ')' #parans
|NUM #quantity
|ID #variables
;

The only place that a variable is assigned is in #assignID and the only
place a variable is retrieved is in #variables. So those are the only
two visit methods we'd need to fulfill the purpose of
CollectVarsVisitor.

The AssignIDContext and VariablesContext will each have a ctx.ID()
because ID appears in both of those rules. And because it appears
exactly once in each, the method returns just a single TerminalNode,
rather than a list of them. The other contexts (tree nodes) don't have
any ID, so there is no ctx.ID() method in those.

CL

Ruben Safir [1]ruben-at-mrbrklyn.com writes:

So kicking this around, forget that this HW is now a month old...

I did this which fails, and I know why...I think

Note that it fails on contex objects that have no ID()

import org.antlr.v4.runtime.ANTLRInputStream; import
org.antlr.v4.runtime.CommonTokenStream; import
org.antlr.v4.runtime.tree.ParseTree; import
org.antlr.v4.runtime.tree.TerminalNode; import
org.antlr.v4.runtime.; import org.antlr.v4.runtime.tree.; import
java.util.HashSet;

public class CollectVarsVisitor extends CalcBaseVisitor { HashSet
vars = new HashSet();

//STMT
-at-Override public Void visitAssignID(CalcParser.AssignIDContext ctx)
{ TerminalNode id = ctx.ID(); if(id != null) {
System.out.println(id.getText()); vars.add(id.getText()); } return
super.visitAssignID(ctx); }
-at-Override
public Void visitPrint(CalcParser.PrintContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println(id.getText());
vars.add(id.getText());
}
return super.visitPrint(ctx);
}

//EXPR
-at-Override
public Void visitNegative(CalcParser.NegativeContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitNegative(ctx);
}


-at-Override
public Void visitProducts_quotents(CalcParser.Products_quotentsContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitProducts_quotents(ctx);
}

-at-Override
public Void visitSums(CalcParser.SumsContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitSums(ctx);
}

-at-Override
public Void visitParans(CalcParser.ParansContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitParans(ctx);
}

-at-Override
public Void visitQuantity(CalcParser.QuantityContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitQuantity(ctx);
}

-at-Override
public Void visitVariables(CalcParser.VariablesContext ctx) {
TerminalNode id = ctx.ID();
if(id != null) {
System.out.println("expresion: " + id.getText());
vars.add(id.getText());
}
return super.visitVariables(ctx);
}

}

[ruben-at-manjaro calculator]$ javac Main.java
./CollectVarsVisitor.java:25: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type PrintContext
./CollectVarsVisitor.java:37: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type NegativeContext
./CollectVarsVisitor.java:48: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type Products_quotentsContext
./CollectVarsVisitor.java:58: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type SumsContext
./CollectVarsVisitor.java:68: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type ParansContext
./CollectVarsVisitor.java:78: error: cannot find symbol
TerminalNode id = ctx.ID();
^
symbol: method ID()
location: variable ctx of type QuantityContext
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
6 errors

cat Calc.g4 grammar Calc;

prog : (stmt `;')* ;

stmt : ID `=' expr #assignID | `print' expr #print ;

expr : `-' expr #negative | expr ('*`|'/`) expr #products_quotents |
expr ('+`|'-`) expr #sums |'(`expr')' #parans |NUM #quantity |ID
#variables ;

NUM : [0-9]+ ('.`[0-9]+)?
; ID :[a-zA-Z]+
; WS :(' `|'`|'`|'')+ ->skip ;

So I'm only visiting visitAssignID and visitQuantity and
visitVariables?

Ruben

- So many immigrant groups have swept through our town that
Brooklyn, like Atlantis, reaches mythological proportions in the
mind of the world - RI Safir 1998 http://www.mrbrklyn.com

DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002
http://www.nylxs.com - Leadership Development in Free Software
http://www2.mrbrklyn.com/resources - Unpublished Archive
http://www.coinhangout.com - coins! http://www.brooklyn-living.com

Being so tracked is for FARM ANIMALS and and extermination camps,
but incompatible with living as a free human being. -RI Safir 2013

References

1. mailto:ruben-at-mrbrklyn.com

--=-=-=--

--===============0359403622==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
hangout mailing list
hangout-at-nylxs.com
http://www.nylxs.com/
--===============0359403622==--

  1. 2016-04-05 ISOC-NY announcements <announce-at-lists.isoc-ny.org> Subject: [Hangout-NYLXS] [isoc-ny] ISOC-NY President Resigns
  2. 2016-04-06 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Returned from the Crussades
  3. 2016-04-06 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] pics
  4. 2016-04-06 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] For Rickie!!!
  5. 2016-04-06 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] For Rickie!!!
  6. 2016-04-06 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Returned from the Crussades
  7. 2016-04-06 James E Keenan <jkeen-at-verizon.net> Subject: [Hangout-NYLXS] Perl 6 Group Update
  8. 2016-04-07 eminker-at-gmail.com Re: [Hangout-NYLXS] Returned from the Crussades
  9. 2016-04-07 From: "David H. Adler" <dha-at-panix.com> Re: [Hangout-NYLXS] Perl 6 Group Update
  10. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Fanless Desktop Solutions
  11. 2016-04-08 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  12. 2016-04-08 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  13. 2016-04-08 einker <eminker-at-gmail.com> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  14. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] technight Announcement for Sunday
  15. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] technight Announcement for Sunday
  16. 2016-04-08 Asia Suarez <as9795-at-nyu.edu> Re: [Hangout-NYLXS] technight Announcement for Sunday
  17. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  18. 2016-04-08 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  19. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Fwd: Linux Journal Weekly News - April 8, 2015
  20. 2016-04-08 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  21. 2016-04-08 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Fanless Desktop Solutions
  22. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] visitor programming
  23. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Fwd: Re: visitor programming
  24. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] visitor programming
  25. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] visitor programming
  26. 2016-04-08 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] visitor programming
  27. 2016-04-08 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Antlr visitor Programming - kicking it around
  28. 2016-04-08 Ruben Safir <ruben.safir-at-my.liu.edu> Subject: [Hangout-NYLXS] visitor programming
  29. 2016-04-08 Ruben Safir <ruben.safir-at-my.liu.edu> Subject: [Hangout-NYLXS] visitor programming in Antlr
  30. 2016-04-09 Christopher League <christopher.league-at-liu.edu> Re: [Hangout-NYLXS] Antlr visitor Programming - kicking it around
  31. 2016-04-09 ISOC-NY announcements <announce-at-lists.isoc-ny.org> Subject: [Hangout-NYLXS] =?utf-8?q?=5Bisoc-ny=5D_SAT/SUN_=E2=80=93_ISOC_Bo?=
  32. 2016-04-09 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Antlr visitor Programming - kicking it around
  33. 2016-04-10 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Through my ole pal Billy - Milliniums are mulch
  34. 2016-04-10 Ruben Safir <mrbrklyn-at-panix.com> Subject: [Hangout-NYLXS] Movie of the Week
  35. 2016-04-10 Asia Suarez <as9795-at-nyu.edu> Re: [Hangout-NYLXS] technight Announcement for Sunday
  36. 2016-04-10 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] technight Announcement for Sunday
  37. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Kernel Workshop announcement
  38. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  39. 2016-04-11 Asia Suarez <as9795-at-nyu.edu> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  40. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  41. 2016-04-11 Asia Suarez <as9795-at-nyu.edu> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  42. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  43. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Rocky Racoon
  44. 2016-04-11 einker <eminker-at-gmail.com> Re: [Hangout-NYLXS] Rocky Racoon
  45. 2016-04-11 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Rocky Racoon
  46. 2016-04-11 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  47. 2016-04-11 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  48. 2016-04-11 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Kernel Workshop announcement
  49. 2016-04-11 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] NYLXS Announcement Kernel Study Group
  50. 2016-04-11 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] Kernel Workshop announcement
  51. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] networking and fragments
  52. 2016-04-11 Ruben Safir <mrbrklyn-at-panix.com> Subject: [Hangout-NYLXS] Fwd: [nylug-talk] RSVP open: Wed Apr 20,
  53. 2016-04-11 From: "Jose A. Rodriguez" <Jose.Rodriguez-at-liu.edu> Re: [Hangout-NYLXS] networking and fragments
  54. 2016-04-10 James E Keenan <jkeen-at-verizon.net> Subject: [Hangout-NYLXS] 2 events this week
  55. 2016-04-11 prmarino1-at-gmail.com Re: [Hangout-NYLXS] networking and fragments
  56. 2016-04-11 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Winners of the LIU Hackathon
  57. 2016-04-11 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] networking and fragments
  58. 2016-04-12 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] the EASY and PAINLESS guil to CRC checksums
  59. 2016-04-13 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] compiling java
  60. 2016-04-13 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] the EASY and PAINLESS guil to CRC checksums
  61. 2016-04-13 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] confused as to arp tables
  62. 2016-04-13 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] confused as to arp tables
  63. 2016-04-13 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] confused as to arp tables
  64. 2016-04-13 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] confused as to arp tables
  65. 2016-04-13 prmarino1-at-gmail.com Re: [Hangout-NYLXS] confused as to arp tables
  66. 2016-04-13 From: "Deutsch, Chaim" <CDeutsch-at-council.nyc.gov> Subject: [Hangout-NYLXS] THE DEUTSCH REPORT: News From Councilman Chaim
  67. 2016-04-13 prmarino1-at-gmail.com Re: [Hangout-NYLXS] confused as to arp tables
  68. 2016-04-14 William Parker <saurian55-at-gmail.com> Subject: [Hangout-NYLXS] [dinosaur] New Seasonal Paleontology Position with
  69. 2016-04-14 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Networking Tools
  70. 2016-04-14 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Networking Tools
  71. 2016-04-14 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Networking Tools
  72. 2016-04-17 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] meetings
  73. 2016-04-18 Ruben Safir <mrbrklyn-at-panix.com> Subject: [Hangout-NYLXS] taking a few days off
  74. 2016-04-18 ruben <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] google booked copyright
  75. 2016-04-18 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Fwd: THE DEUTSCH REPORT: News From Councilman Chaim
  76. 2016-04-19 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Passover is here
  77. 2016-04-21 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] turn off your god damn phone
  78. 2016-04-21 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Java is just retarted
  79. 2016-04-21 Ruben Safir <mrbrklyn-at-panix.com> Subject: [Hangout-NYLXS] Khol Meod
  80. 2016-04-21 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Java is just retarted
  81. 2016-04-21 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Java is just retarted
  82. 2016-04-22 Ruben Safir <ruben.safir-at-my.liu.edu> Re: [Hangout-NYLXS] Denim Day - Wear Jeans with a Purpose, April 27
  83. 2016-04-23 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] must have tech
  84. 2016-04-24 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] you have to love this story
  85. 2016-04-24 prmarino1-at-gmail.com Re: [Hangout-NYLXS] must have tech
  86. 2016-04-24 prmarino1-at-gmail.com Re: [Hangout-NYLXS] must have tech
  87. 2016-04-25 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] [kamran.mirzayev-at-my.liu.edu: Re: Programming
  88. 2016-04-25 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] + behavior in the shell
  89. 2016-04-26 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] error: unclosed character literal
  90. 2016-04-26 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] error: unclosed character literal
  91. 2016-04-26 Rshana Shurriah <rshanashurriah-at-gmail.com> Re: [Hangout-NYLXS] error: unclosed character literal
  92. 2016-04-26 Ruben Safir <ruben-at-mrbrklyn.com> Re: [Hangout-NYLXS] error: unclosed character literal
  93. 2016-04-26 Christopher League <christopher.league-at-liu.edu> Re: [Hangout-NYLXS] fwiw with errors
  94. 2016-04-26 Christopher League <christopher.league-at-liu.edu> Re: [Hangout-NYLXS] Good Morning Sunshine
  95. 2016-04-26 Christopher League <christopher.league-at-liu.edu> Re: [Hangout-NYLXS] heart burn
  96. 2016-04-26 Christopher League <christopher.league-at-liu.edu> Re: [Hangout-NYLXS] error: unclosed character literal
  97. 2016-04-27 IEEE CS Webinars <csconnection-at-computer.org> Subject: [Hangout-NYLXS] Don't forget to register: Is Your DevOps Team
  98. 2016-04-27 Paul Li <paul.li.nyc-at-hotmail.com> Re: [Hangout-NYLXS] hangout Digest, Vol 7, Issue 27
  99. 2016-04-27 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] hangout Digest, Vol 7, Issue 27
  100. 2016-04-27 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] Communications Bill
  101. 2016-04-28 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] Communications Bill
  102. 2016-04-28 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] AI Conference
  103. 2016-04-28 Ruben Safir <ruben-at-mrbrklyn.com> Subject: [Hangout-NYLXS] What is a U (other than a letter in the alphabet)
  104. 2016-04-28 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Communications Bill
  105. 2016-04-28 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] What is a U (other than a letter in the
  106. 2016-04-28 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] What is a U (other than a letter in the
  107. 2016-04-28 Ruben Safir <mrbrklyn-at-panix.com> Subject: [Hangout-NYLXS] Fwd: Tell us about your recent Optimum experience.
  108. 2016-04-28 Ruben Safir <mrbrklyn-at-panix.com> Re: [Hangout-NYLXS] Tell us about your recent Optimum experience.
  109. 2016-04-27 James E Keenan <jkeen-at-verizon.net> Subject: [Hangout-NYLXS] NYC Perl 6 Beginners Study Group: Session 4: Sat
  110. 2016-04-28 Christopher League <christopher.league-at-liu.edu> Subject: [Hangout-NYLXS] how to build/run assn7/8 from cmdline
  111. 2016-04-28 prmarino1-at-gmail.com Re: [Hangout-NYLXS] NYC Perl 6 Beginners Study Group: Session 4:
  112. 2016-04-28 prmarino1-at-gmail.com Re: [Hangout-NYLXS] Communications Bill
  113. 2016-04-29 Rick Moen <rick-at-linuxmafia.com> Re: [Hangout-NYLXS] What is a U (other than a letter in the

NYLXS are Do'ers and the first step of Doing is Joining! Join NYLXS and make a difference in your community today!